【发布时间】:2020-03-02 16:20:13
【问题描述】:
如何调用 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;
感谢您的宝贵时间。
【问题讨论】:
-
对不起,但我不知道你到底想做什么......?根据
Can't use string ("p") as a HASH ref ...,显示的程序失败。你能用语言表达你想要什么吗? -
至于你所说的,
$h{key_with_sub}->();... 就是你所需要的吗? -
@zdim 感谢您的回复。目标是调用匿名子例程。我期望
&$cref()应该可以工作。 -
好的。所以:你传递给你的函数的是一个列表,正如@dgw 所说,
p和匿名子sub {...}(这只是一个引用,一个标量)。在 sub 中,您使用第一个参数 ($_[0]),所以这是p,它只是一个字符串,只是一个字母。然后你尝试将它“取消引用”到一个哈希(%{ $href })——好吧,它不是一个引用......这是程序退出的错误。为什么你认为p是一个 hashref? -
... 和
"p" => 1与"p", 1相同(一个列表)。看到它in perlop
标签: perl hash subroutine