Come verificare che in Perl variabile che contiene undef

Il compito. Nel codice nel linguaggio di programmazione Perl è variabile. È necessario verificare se il valore di questa variabile undef o no.

La decisione

In una variabile contiene undef solo se la funzione defined per questa variabile restituisce false. Ecco il codice che visualizza testo se la variabile contiene undef:

▶ Run
#!/usr/bin/perl

my $foo;

if ( !defined($foo) ) {
    print "foo is undef";
}

Decisioni sbagliate

Per verificare se undef in una variabile è necessario utilizzare defined. Ma spesso accade che per verificare la undef utilizzano altri modi sbagliati.

Ecco il primo esempio di come non fare:

▶ Run
#!/usr/bin/perl

my $foo;

if ( !$foo ) { # error!
    print "foo is undef";
}

Questo è un esempio davvero visualizza la stringa foo is undef se la variabile di $foo contiene il valore undef, ma il codice visualizzato questo posto e in altri casi. Ad esempio, se in $foo contiene il numero di 0 o una stringa vuota ''. Questo codice — questa non è una prova il fatto che in $foo contiene undef, e controllo su ciò che in $foo contiene il valore di una bugia, e questo non è assolutamente la stessa cosa che undef.

Ecco un altro esempio di errata verifica sul undef:

▶ Run
#!/usr/bin/perl

my $foo;

if ( $foo == undef ) { # error!
    print "foo is undef";
}

Qui proprio tutto completamente sbagliato. Se in una variabile $foo contiene il valore undef, il codice visualizzato posto foo is undef, ma il codice visualizzato questo posto e in altri casi. Ad esempio, se in una variabile $foocontiene stringa 'Hello'.

L'operatore == è stato progettato per il confronto di numeri. Prima di effettuare un confronto di questo operatore converte i loro argomenti in numeri. Variabile $foo in cui si trova undef diventa il numero 0. E undef a destra dell'operatore diventa anche il numero di 0. Zero è uguale a zero, la condizione è attivato. Ma zero diventano e alcuni comandi, ad esempio 'Hello'.

Se aggiungi a questo codice use strict; e use warnings;, il Perl visualizza la stringa foo is undef, ma proprio informerà su ciò che sta accadendo qualcosa di strano:

Use of uninitialized value in numeric eq (==) at script.pl line 8.
Use of uninitialized value $foo in numeric eq (==) at script.pl line 8.
foo is undef

Ma in generale è sempre molto buona pratica utilizzare sempre use strict; e use warnings;.

Temi correlati

Altri articoli