Perché il seguente codice:comportamento incoerente in materia di "Non è possibile utilizzare un valore indefinito come un riferimento ad array"
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};
Gettare l'errore "Can't use an undefined value as an ARRAY reference
", mentre il codice seguente:
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};
non buttare via nulla, ma invece restituisce:
$VAR1 = {
'ENTERPRISES' => []
};
Done!
Entrambi hanno il merluzzo incriminato e in loro, ma solo uno sta lanciando l'errore.
possibile risposta:Perl's autovivification?
Sono sulla strada giusta? Grazie per il tuo contributo.
Cosa stai cercando di fare? Il fatto che tu abbia disattivato gli avvisi per farlo dovrebbe essere davvero un buon campanello d'allarme che non è una buona idea. – Sobrique
Sto solo cercando di capire cosa sta facendo Perl per lanciare l'errore in un punto e non in un altro per lo stesso bit di codice. Il primo blocco di codice proviene dal vecchio codice che genera l'errore e deve essere corretto, mentre il secondo blocco di codice è il più nuovo codice che sono preoccupato anche la correzione, ma credo che non lo sia poiché non genera l'errore che ho visto nel passato. – Morrowind789