我如何调用其引用保存在哈希中的perl匿名子例程?
这里是代码
#!/usr/bin/perl -W
use strict;
use warnings 'FATAL';
use diagnostics;
use utf8;
sub fn {
my $href = $_[0];
my %h = %{ $href };
print %h;
my $cref = $h{'p'};
&$cref();
}
fn p => sub { print "inside anon function\n" };
1;
感谢您的时间。
您的子期望传递一个哈希引用,但是您不传递一个哈希引用。您传递一个字符串(p
)和一个代码ref。那是因为
fn p => sub { print "inside anon function\n" };
与]相同>
fn "p", sub { print "inside anon function\n" };
修复:
sub fn { my %h = @_; my $cref = $h{p}; $cref->(); } fn p => sub { print "inside anon function\n" };
这将在子内部构建散列。如果您想在外部构建哈希并传递对它的引用,它将看起来像这样:
sub fn { my $href = $_[0]; my $cref = $href->{p}; $cref->(); } fn { p => sub { print "inside anon function\n" } };
我避免对哈希(
my %h = %{ $href };
)进行无用的复制。
&$cref()
(但不是&$cref
)也可以。我只喜欢箭头符号。