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 所以我希望这些来源可以像其中一个或另一个一样写出来,而不是两者之间的混合.当然,在某些情况下应该忽略经验法则,但在这种情况下没有任何想法. 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |