Ho il seguente (idealizzato da un bug) breve script in Perl:Perché il mio hash non è undef?
my %metadata = undef;
if (defined %metadata)
{
print "defined";
}
Per qualche motivo l'output del programma è sempre "definito". Quindi impostare l'hash come "non definito" lo rende in qualche modo definito. È definito come "non definito"?
EDIT:
Questo è un caso idealizzato, nel tentativo di replicare il problema. Quello che sto facendo in realtà è più simile a:
my %metadata = my_sub_function();
if (defined %metadata)
{
print "defined";
}
in cui l'uscita di my_sub_function può essere undef,() o un hash popolata, ed io per stampare solo "definito" l'ultimo di questi casi.
EDIT 2:
Per inciso ho trovato che
if (scalar(keys %metadata)
si comporta correttamente per(), ma ancora non per undef.
fa 'my_sub_function' fare un' ritorno undef' per i ndicate fallimento o nessun dato? Se è così, dovrebbe probabilmente fare un semplice 'ritorno 'invece. Questo sarebbe interpretato come 'undef' nel contesto scalare e'() '(la lista vuota) nel contesto dell'elenco. –