In Perl lerne ich gerade, wie man "Subroutinenreferenzen" dereferenziert. Aber ich kann anscheinend keine Unterprogrammreferenz als Hash-"Schlüssel" verwenden.
Im folgenden Beispielcode,
- Ich kann einen Verweis auf ein Unterprogramm erstellen ($subref) und ihn dann dereferenzieren, um das Unterprogramm auszuführen (&$subref)
- Ich kann den Verweis als Hash-"Wert" verwenden und diesen dann einfach dereferenzieren
- Aber ich kann nicht herausfinden, wie ich die Referenz als Hash-Schlüssel verwenden kann. Wenn ich den Schlüssel aus dem Hash ziehe, interpretiert Perl den Schlüssel als String-Wert (nicht als Referenz) - was ich jetzt verstehen. (dank dieser Website!). Also habe ich versucht, Hash::MultiKey, aber das scheint es in ein Array-Referenz zu machen. Ich möchte es als eine Subroutine/Code-Referenz zu behandeln, vorausgesetzt, dies ist irgendwie möglich?
Haben Sie eine andere Idee?
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";
}
Dies wird zurückgesendet:
hello bob and sue
hello bob and sue
Ref type is: ARRAY
Not a CODE reference at d:\temp\test.pl line 21.