Was ist der Unterschied zwischen %{$var}
und %$var
? Ich habe diesen Code ausprobiert, aber es gibt einen Fehler:
Jede Referenz ist experimentell in test.pl Zeile 21. Art des Arguments Zu jedem Verweis muss bei test.pl nicht gesegnete Hashref oder Arrayref sein Zeile 21.
use feature "say";
%HoH = (
1 => {
husband => "fred",
pal => "barney",
},
2 => {
husband => "george",
wife => "jane",
"his boy" => "elroy",
},
3 => {
husband => "homer",
wife => "marge",
kid => "bart",
},
);
for ($i = 1; $i <= 3; $i++) {
while ( ($family, $roles) = each %$HoH{$i} ) {
say "$family: $roles";
}
}
Aber dieser Code funktioniert gut:
use feature "say";
%HoH = (
1 => {
husband => "fred",
pal => "barney",
},
2 => {
husband => "george",
wife => "jane",
"his boy" => "elroy",
},
3 => {
husband => "homer",
wife => "marge",
kid => "bart",
},
);
for ($i = 1; $i <= 3; $i++) {
while ( ($family, $roles) = each %{$HoH{$i}} ) {
say "$family: $roles";
}
}
Antworten:
7 für die Antwort № 1Mit %$HoH{$i}
Sie machen eine Hash-Referenz von $ HoH, während Sie mit %{$HoH{$i}}
Sie machen eine Hashreferenz von $HoH{$i}
, was du willst ... Und, use strict
auf deinem Code :-)
2 für die Antwort № 2
Es liegt an den unterschiedlichen Prioritätsstufen der Auflösung des Hashs gegenüber dem Subskribieren des Hashes. Es funktioniert mit der zweiten Version - %{ $HoH{$i} }
- weil Sie eindeutig angeben, dass der Wert, der von der Suche von zurückgegeben wird $HoH{$i}
ist selbst eine hashref.
Wohingegen %$HoH{$i}
wird als interpretiert %{ $HoH }{$i}
- dh. Die Subskription erfolgt nach dem Ausdruck $HoH
wird als Hashref interpretiert - was nicht "t" ist. %HoH
ist ein Hash aber $HoH
wird nicht verwendet - d. h. es ist undefiniert.