Eli*_*ght 44
这是一个完整的,有效的脚本,可以演示您的要求.
sub a { print "Hello World!\n"; }
sub b {
my $func = $_[0];
$func->();
}
b(\&a);
Run Code Online (Sandbox Code Playgroud)
这是一个解释:你a通过说,参考功能\&a.那时你有一个功能参考; 通常,通过说func()你调用函数引用来调用函数$func->()
该->语法处理其他文献为好.例如,这是处理数组和哈希引用的示例:
sub f {
my ($aref, $href) = @_;
print "Here's an array reference: $aref->[0]\n"; # prints 5
print "Here's a hash ref: $href->{hello}\n"; # prints "world"
}
my @a = (5, 6, 7);
my %h = (hello=>"world", goodbye=>"girl");
f(\@a, \%h);
Run Code Online (Sandbox Code Playgroud)
您无法直接将函数传递给其他函数.相反,您传递对函数的引用.要调用该函数,您可以使用->(); 取消引用它(作为CODE引用);
sub a { print @_ }
sub b {
my $f = shift; # assuming that $f is a function reference...
$f->(@_); # call it with the remaining arguments
}
b(\&a, "hello, world!"); # prints "hello, world!"
Run Code Online (Sandbox Code Playgroud)
Perl没有按名称传递语义,但您可以使用哈希模拟它们.调用该函数的方法是相同的.你取消引用它.
sub a { print @_ }
sub b {
my %arg = @_;
$arg{function}->(@{$arg{arguments}});
}
b(function => \&a, arguments => ["hello, world!"]);
Run Code Online (Sandbox Code Playgroud)
ObPerl6:Perl 6将具有按名称传递的语义.