加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl模块类方法vs普通子例程

发布时间:2020-12-16 06:27:38 所属栏目:大数据 来源:网络整理
导读:所以我想知道Perl类方法和标准模块中的普通子例程之间的使用是否存在任何差异.你有没有时间使用其中一个?对于这个例子,我假设在任一模块中都没有对象方法. 这里快速的小主要课程: #!/usr/local/bin/perluse strict;use warnings;use Foo;use Bar;my $arg1
所以我想知道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);

包Foo将保持我的普通子程序调用

use strict;
use warnings;

package Foo;

sub subroutine {
    my $arg = shift;
    my $string = "Ordinary subroutine arg is $argn";
    return $string;
}
1;

包栏将保持我的类方法调用

use strict;
use warnings;

package Bar;

sub subroutine {
    my $class = shift;
    my $arg = shift;
    my $string = "Class method arg is $argn";
    return $string;
}
1;

通常,如果我正在编写Perl代码,我只会使用类方法选项(就像使用Bar示例一样),但是我在阅读了一个使用Foo示例中的语法的前同事的代码之后开始思考这个问题.两者似乎本身都做同样的事情,但似乎不仅仅是满足于眼睛.

解决方法

决策程序是您的Module是否是面向对象的模块.

>如果Module只是一个子程序集合的容器,那么我希望它使用Exporter并提供将其子程序的子集导入调用名称空间的机会.一个例子是List :: Util
>另一方面,如果有一个构造函数Module :: new,并且打算以OO方式使用它,那么你不应该在方法中混合简单的子例程(除了模块可能在内部使用的私有子例程) ).一个例子是LWP :: UserAgent

所以我希望这些来源可以像其中一个或另一个一样写出来,而不是两者之间的混合.当然,在某些情况下应该忽略经验法则,但在这种情况下没有任何想法.

Foo.pm

use strict;
use warnings;

package Foo;

use Exporter 'import';
our @EXPORT_OK = qw/ subroutine /;

sub subroutine {
    my ($arg)  = @_;
    "Ordinary subroutine arg is $argn";
}

1;

Bar.pm

use strict;
use warnings;

package Bar;

sub new {
  my $class = shift;
  bless {},$class;
}

sub subroutine {
    my $class = shift;
    my ($arg) = @_;
    "Class method arg is $argn";
}

1;

main.pl

#!/usr/local/bin/perl

use strict;
use warnings;

use Foo 'subroutine';
use Bar;

my $arg1 = "blah";

print subroutine($arg1);
print Bar->subroutine($arg1);

产量

Ordinary subroutine arg is blah
Class method arg is blah

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读