Ihs*_*wer 1 perl subroutine dereference perl-hash
嗨,我对perl很新.我有一个包含子程序的perl哈希.我试图以我在网上找到的各种方式运行它.但似乎没有任何效果.我的代码:
%hashfun = (
start=>sub { print 'hello' },
end=>sub { print 'bye' }
);
Run Code Online (Sandbox Code Playgroud)
我尝试了以下等等.
print "\n $hashfun{start} \n";
Run Code Online (Sandbox Code Playgroud)
这导致以下输出:
代码(<HexaDecimal Value>)
然后我试了一下
print "\n $hashfun{start}->() \n";
Run Code Online (Sandbox Code Playgroud)
这导致以下结果
代码(<HexaDecimal Value>) - >()
怎么修?
你的最后一次尝试是正确的语法,但在错误的地方.你不能在字符串插值1中运行代码.将它移到双引号之外"".
print "\n";
$hashfun{start}->();
print"\n";
Run Code Online (Sandbox Code Playgroud)
重要的是不要print实际调用$hashfun{start},因为这会返回1.那是因为Perl中的sub总是返回sub中最后一个语句的返回值(可以是a return).在这里,它是一个print.和返回值print是1如果打印成功.那么print "\n", $hashfun{start}->(), "\n";输出
hello 1
1)其实你可以,但你真的不应该.print "\n@{[&{$hashfun{start}}]}\n";将工作.这非常神奇,你真的不应该这样做.
因为数组可以插入到字符串中,所以数组deref在双引号内部工作.deref中的内容正在运行,因此&$hashfun{start}(这是一种不同的调用coderef的方式)运行.但是因为它返回1并且不是数组引用,我们需要将它包装[]进去,然后将它放入一个数组引用,然后被解除引用.请不要使用它!