所以我想知道Perl类方法和标准模块中的普通子例程之间的使用是否存在任何差异.你有没有时间使用其中一个?对于这个例子,我假设在任一模块中都没有对象方法.
这里快速的小主要课程:
#!/usr/local/bin/perl
use strict;
use warnings;
use Foo;
use Bar;
my $arg1 = "blah";
my ($str1, $str2);
$str1 = Foo::subroutine($arg1);
$str2 = Bar->subroutine($arg1);
exit(0);
Run Code Online (Sandbox Code Playgroud)
包Foo将保持我的普通子程序调用
use strict;
use warnings;
package Foo;
sub subroutine {
my $arg = shift;
my $string = "Ordinary subroutine arg is $arg\n";
return $string;
}
1;
Run Code Online (Sandbox Code Playgroud)
包栏将保持我的类方法调用
use strict;
use warnings;
package Bar;
sub subroutine {
my $class = shift;
my $arg = shift;
my $string = "Class method arg is $arg\n";
return $string;
}
1;
Run Code Online (Sandbox Code Playgroud)
通常,如果我正在编写Perl代码,我只会使用类方法选项(就像使用Bar示例一样),但是我在阅读了一个使用Foo示例中的语法的前同事的代码之后开始思考这个问题.两者似乎本身都做同样的事情,但似乎不仅仅是满足于眼睛.
普通子例程本身并没有什么问题。他们很好地完成了他们设计的任务。
另一方面,方法做所有相同的事情,并且可以与从您的类继承的任何类很好地配合。
所以问问自己:
或者
这个世界上有足够的空间容纳这两者,但如果您发现自己像在 中所做的那样,Bar忽略了$class(或更常见的是$self)整个模块,那么也许您将它们设计为方法就走得太远了。更重要的是,当你的方法无法区分两个类之间的区别时,任何试图从你的边缘 OO“类”继承的人都会感到惊讶......