Mam te dwa fragmenty kodu, które pozornie powinny dawać taki sam wynik, ale drugi powoduje błąd.Brakujący błąd dla niezdefiniowanej wartości jako wartości skrótu
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
Dlaczego mając values
w tej samej linii umożliwienia go do pracy? Wolałbym, aby obaj popełnili błąd, ponieważ używanie nieokreślonej wartości jako odnośnika hash jest oczywistym błędem. Nie mam żadnych nowych wersji perla do testowania, ale było to powtarzalne w 5.8.8 i 5.10.1.
Myślę, że [to podobne pytanie SO] (http://stackoverflow.com/q/6419618) o odniesieniach tablicowych dotyczy również tutaj. ikegami mówi: "Dereferences autovivify w kontekście lwartości (czyli kiedy oczekiwana jest wartość modyfikowalna)." 'perldoc -f wartości' mówi" Zauważ, że wartości nie są kopiowane, co oznacza, że modyfikowanie ich spowoduje modyfikację zawartości skrótu ". – 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
Jeśli było to związane z autoworyzacją, oczekiwałbym, że "brak autoworyzacji" spowoduje błąd w pierwszym fragmencie. To nie. – AKHolland