Ho questi due frammenti di codice che apparentemente dovrebbero produrre lo stesso risultato, ma quest'ultimo causa un errore.Errore mancante per il valore non definito come riferimento hash
1:
my $href = undef;
my @values = values %{ $href };
# OK - @values is empty
2:
my $href = undef;
my %hash = %{ $href }; # <-- Error here
my @values = values %hash;
# ERROR: Can't use an undefined value as a HASH reference
Perché non avendo values
nella stessa linea permette di lavorare? Preferirei che entrambi commettessero un errore, poiché l'utilizzo di un valore non definito come riferimento hash è chiaramente un errore. Non ho più versioni recenti di perl da testare, ma questo era riproducibile in 5.8.8 e 5.10.1.
Penso che [questa domanda SO simile] (http://stackoverflow.com/q/6419618) sui riferimenti di array si applichi anche qui. Ikegami dice "Le autorizzazioni si autoviviano nel contesto di lvalue (nel senso che è previsto un valore modificabile)." 'Perldoc -f values' dice" Nota che i valori non vengono copiati, il che significa che modificarli modificherà il contenuto dell'hash. " – ThisSuitIsBlackNot
http://www.perlarchive.com/___TLC/7026.shtml http://stackoverflow.com/questions/1643717/why-does-an-undef-value-become-a-valid-array-reference-in- perl – chilemagic
Se questo fosse correlato all'autovivificazione, mi aspetterei che "nessuna autovivificazione" causi un errore nel primo frammento. Non è così. – AKHolland