调用 perl 匿名子程序,其引用保存在散列中
call perl anonymous subroutine whose reference is maintained in a hash
如何调用其引用在散列中维护的 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
) 和一个代码引用。那是因为
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 内部构建哈希。如果你想在外部构建散列并传递对它的引用,它看起来像这样:
sub fn {
my $href = $_[0];
my $cref = $href->{p};
$cref->();
}
fn { p => sub { print "inside anon function\n" } };
我避免制作无用的散列副本 (my %h = %{ $href };
)。
&$cref()
(但不是 &$cref
)也可以。我只是更喜欢箭头符号。
如何调用其引用在散列中维护的 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
) 和一个代码引用。那是因为
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 内部构建哈希。如果你想在外部构建散列并传递对它的引用,它看起来像这样:
sub fn {
my $href = $_[0];
my $cref = $href->{p};
$cref->();
}
fn { p => sub { print "inside anon function\n" } };
我避免制作无用的散列副本 (my %h = %{ $href };
)。
&$cref()
(但不是 &$cref
)也可以。我只是更喜欢箭头符号。