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.