我正在尝试弄清楚如何使函数引用适用于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)取消引用,正确的语法是什么?
发布于 2010-02-05 01:06:07
TMTOWTDI
定义函数引用的:
$ref = \&subroutine;
$ref = sub { BLOCK };
$ref = "subroutineName"; # or $ref = $scalarSubroutineNameDereferencing:
$ref->(@args);
&$ref;
&{$ref}(@args);发布于 2010-02-05 01:06:04
如果$ref是一个方法(期望$self作为第一个参数),并且您希望在$self上调用它,则语法为:
$self->$ref(@args)发布于 2010-02-05 01:06:37
使用以下内容:
$self->$ref();使用这种语法,$ref可以是对子例程的引用,甚至可以是具有要调用的方法的名称的字符串,例如,
my $ref = "foo";
$self->$ref();请注意,这两者在继承方面的语义略有不同。
当不传递显式参数时,括号是可选的:
$self->$ref; # also flies否则,使用
$self->$ref($arg1, \%arg2, @others);https://stackoverflow.com/questions/2201552
复制相似问题