我正在试图弄清楚如何为Perl模块创建函数引用。我知道如何在模块外部进行,但在一个模块内部?考虑这样的代码:
==mymodule.pm==
1 sub foo { my $self = shift; ... }
2 sub bar { my $self = shift; ... }
3 sub zip {
4 my $self = shift;
5 my $ref = \&foo;
6 $self->&$foo(); # what syntax is appropriate?
7 }
==eof===
请看上面的第5-6行。 (1)首先定义函数引用,以及(2)解引用它的正确语法是什么?
答案 0 :(得分:23)
TMTOWTDI
定义函数引用:
$ref = \&subroutine;
$ref = sub { BLOCK };
$ref = "subroutineName"; # or $ref = $scalarSubroutineName
<强>解引用:强>
$ref->(@args);
&$ref;
&{$ref}(@args);
答案 1 :(得分:9)
如果$ref
是一个方法(期望$self
作为第一个参数)并且您想要调用它
您的$self
,语法为:
$self->$ref(@args)
答案 2 :(得分:6)
使用以下内容:
$self->$ref();
使用这种语法,$ref
可以是对子程序的引用,甚至是带有要调用的方法名称的字符串,例如,
my $ref = "foo";
$self->$ref();
请注意,这两者在继承方面的语义略有不同。
如果未传递显式参数,则括号是可选的:
$self->$ref; # also flies
否则,请使用
$self->$ref($arg1, \%arg2, @others);