Perl:静态与包方法

Perl: Static vs Package methods

我需要创建一个包供其他开发人员使用。 实现静态方法的最佳方式是什么? 对于静态 (class) 方法,我必须期望第一个参数 $class,并且方法必须作为 class 方法调用:

My::Package->Sub1();

另一方面,我可以编写一个 "regular" 包子例程(不需要 $class 参数),它可以完美地完成相同的操作,但需要以不同的方式调用

My::Package::Sub1();

所以,从业务功能的角度来看基本上没有区别(至少我没有看到,除了通过第一个参数提供包名可用性),但是有两种不同的实现和调用方式。有点混乱。 我应该使用哪种方式以及何时使用?有什么规律吗? 另外,我是否应该检查方法是否按预期调用(静态与包)?

首先,一个功能点:如果创建第2个Class继承自My::PackageChild::Class::Sub1()将是undefined,如果Sub1写成非 OO 子例程,Child::Class->Sub1() 将忽略从 Child::Class.

调用它的事实

因此,为了程序员使用您的模块,您需要使 Package/Class 中的所有子例程响应一致的调用 structure/methodology。您的模块应该是 subroutines/functions 的 library 或充满方法的 class。如果它的一部分是面向对象的,那就让它全部面向对象。可以创建子程序以在混合模式下运行,但这会使代码不必要地复杂化,并且似乎在 CPAN 上已经过时了。

现在,如果确实没有理由区分 My::Package->Sub1()Child::Class->Sub1(),那么您可以随意忽略将传递给您的隐式 class 名称参数。这并不意味着您不应该 期望 该参数,或者您应该鼓励在 OO 模块中使用非 OO 调用格式。