Dlaczego następujący kod:niespójne zachowanie dotyczące „Nie można użyć nieokreślonej wartości jako odniesienie tablicy”
use strict;
use warnings;
no warnings 'uninitialized';
use Data::Dumper;
my $user;
my @data = @{$user->{ENTERPRISE}}; # Error on this line
print Dumper($user), qq{Done!\n};
rzucać błąd „Can't use an undefined value as an ARRAY reference
”, podczas następującego kodu:
use strict;
use warnings;
no warnings 'uninitialized';
use Data::Dumper;
my $user;
foreach my $enterprise(@{$user->{ENTERPRISES}}) {
print qq{Enterprise:}, $enterprise;
}
print Dumper($user), qq{Done!\n};
Nic nie wrzuca, ale zamiast tego zwraca:
$VAR1 = {
'ENTERPRISES' => []
};
Done!
Oba mają naruszającego dorsza w nich, ale tylko jeden rzuca błąd.
możliwa odpowiedź:Perl's autovivification?
Jestem na dobrej drodze tutaj? Dzięki za wkład.
Co właściwie próbujesz zrobić? To, że wyłączyłeś ostrzeżenia, powinno być naprawdę dobrym sygnałem ostrzegawczym, że nie jest to dobry pomysł. – Sobrique
Próbuję tylko dowiedzieć się, co Perl robi, aby rzucić błąd w jednym miejscu, a nie w innym na ten sam kawałek kodu. Pierwszy blok kodu pochodzi ze starszego kodu, który zgłasza błąd i musi zostać naprawiony, podczas gdy drugi blok kodu jest nowszym kodem, o który się martwię, będzie również potrzebował poprawki, ale chyba nie, ponieważ nie rzuca błędu, który widziałem w przeszłości. – Morrowind789