-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


Funzioni Perl in italiano

indietro

  • defined ESPR
  • defined

    Restituisce un valore Booleano, che indica se ESPR ha un valore diverso dal valore indefinito undef. Se ESPR non è presente, il controllo viene fatto su $_.

    Molte operazioni restituiscono undef per indicare l'insuccesso, la fine del file, un errore di sistema, una variabile non inizializzata, ed altre condizioni eccezionali. (Un semplice test Booleano non è in grado di distinguere tra undef, zero, la stringa vuota, e "0", che sono tutti ugualmente falsi). Va notato che, poiché undef è uno scalare valido, la sua presenza non indica necessariamente una condizione eccezionale: pop restituisce undef guardo il suo argomento è un array vuoto, oppure quando l'elemento da restituire è esso stesso undef.

    Potete anche usare defined(&pippo) per controllare se una subroutine &pippo è stata definita in precedenza. Il valore restituito non è variato da eventuali future dichiarazioni di &pippo. Va notato che un subroutine non definita può ancora essere chiamabile: il suo package può avere un metodo AUTOLOAD che ne provoca l'esistenza la prima volta che viene chiamata, consultate perlsub.

    L'uso di defined su strutture (hash ed array) è deprecato. Indicava quanta memoria era stata allocata per una determinata struttura. Questa caratteristica potrebbe scomparire nelle future versione di Perl. Al suo posto, fareste meglio ad usare un semplice test di dimensione:

        if (@un_array) { print "l'array contiene elementi\n" }
        if (%un_hash)  { print "l'hash contiene membri\n"    }

    Quando utilizzato su un elemento di un hash, defined vi dice se quel valore è definito o meno, non se esiste o meno la chiave nell'hash. Usate exists se vi interessa la seconda informazione.

    Esempi:

        print if defined $switch{'D'};
        print "$val\n" while defined($val = pop(@ary));
        die "Non posso leggere il link $sym: $!"
    	unless defined($valore = readlink $sym);
        sub pippo { defined &pluto ? &$pluto(@_) : die "Non esiste pluto"; }
        $debugging = 0 unless defined $debugging;

    Nota: Molta gente tende ad abusare di defined, e poi si sorprende di scoprire che il numero 0 e "" (la stringa di lunghezza zero) sono, in realtà, valori definiti. Per esempio, se scrivete:

        "ab" =~ /a(.*)b/;

    La ricerca del pattern ha successo, e $1 risulta definito, nonostante esso abbia trovato "nulla". Non è che non ha veramente trovato nulla. Piuttosto, ha trovato qualcosa che era lungo zero caratteri. Tutto ciò è piuttosto chiaro e corretto. Quando una funzione restituisce un valore indefinito, ammette di non essere in grado di fornire una risposta corretta. Quindi dovreste usare defined solo quando dubitate dell'integrità di ciò che state tentando di fare. Nelle altre circostanze, una semplice comparazione on 0 o "" è ciò che desiderate.

    Consultate anche undef, exists, ref.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google