在 Perl 中,如果它的包是已知的,那么指定一个回调或代码引用是非常简单的:
package Foo;
sub foo { print "in foo" }
# and then
package main;
sub baz {
my $code = shift;
$code->();
}
baz( \&Foo::foo );
这打印出来in foo
。
假设您有一个非常简单的对象,如下所示:
package Foo;
sub new { bless {}, shift }
sub bar { print "in bar" }
sub baz { print "in baz" }
您可以使用上述方式(\&Package:Method)查找方法并将其称为
package main;
my $foo = Foo->new();
my $ref = \&Foo::bar;
$foo->$ref();
但有时(好吧,经常)你不知道显式类型。假设有Foo
, Bar
, Baz
,它们都有自己的blat
方法。您希望基于对象而不是包来获取对适当方法的引用。你会怎么做呢?