在 Perl 中,我正在学习如何取消引用“子例程引用”。但我似乎无法将子例程引用用作哈希“键”。
在以下示例代码中,
- 我可以创建对子例程 ($subref) 的引用,然后取消引用它以运行子例程 (&$subref)
- 我可以将引用用作哈希“值”,然后轻松取消引用
- 但我无法弄清楚如何将引用用作哈希“键”。当我从散列中取出密钥时,Perl 将密钥解释为字符串值(不是引用)——我现在明白了(感谢这个网站!)。所以我尝试了 Hash::MultiKey,但这似乎把它变成了一个数组引用。我想把它当作一个子程序/代码参考,假设这是可能的?
还有其他想法吗?
use strict;
#use diagnostics;
use Hash::MultiKey;
my $subref = \&hello;
#1:
&$subref('bob','sue'); #okay
#2:
my %hash;
$hash{'sayhi'}=$subref;
&{$hash{'sayhi'}}('bob','sue'); #okay
#3:
my %hash2;
tie %hash2, 'Hash::MultiKey';
$hash2{$subref}=1;
foreach my $key (keys %hash2) {
print "Ref type is: ". ref($key)."\n";
&{$key}('bob','sue'); # Not okay
}
sub hello {
my $name=shift;
my $name2=shift;
print "hello $name and $name2\n";
}
这是返回的内容:
hello bob and sue
hello bob and sue
Ref type is: ARRAY
Not a CODE reference at d:\temp\test.pl line 21.