undef
in Perl
undef
nel linguaggio di programmazione Perl è uno dei valori che può essere contenuta in una variabile.
Se non assegnare ad una variabile un valore in una variabile è undef
.
Ecco un esempio di un programma Perl:
▶ Run
use strict;
use warnings;
use Data::Dumper;
my $var;
print Dumper $var;
$var = 123;
print Dumper $var;
$var = undef;
print Dumper $var;
Questo programma visualizza:
$VAR1 = undef;
$VAR1 = 123;
$VAR1 = undef;
In primo luogo abbiamo dichiarato una variabile, ma non è assegnato alcun valore: my $var;
.
Poi con l'aiuto di print Dumper $var;
hanno informazioni circa il valore di questa variabile sulla schermata
(visto che la variabile contiene undef
). Dopo di che, abbiamo dato variabile numero 123
e
hanno mostrato sullo schermo. E poi con il codice $var = undef;
è assegnato alla variabile undef
e di nuovo
hanno informazioni su di esso.
undef
può essere un elemento in un array o un valore in хеше:
▶ Run
use strict;
use warnings;
use Data::Dumper;
my @arr = (1, undef, 'three');
print Dumper \@arr;
my %h = (
a => undef,
);
print Dumper \%h;
Spesso undef
viene utilizzato come una bandiera speciale. Ad esempio, può essere una funzione che restituisce un numero, ma in caso di errore restituisce undef
.
Il nome undef
deriva dalla parola inglese undefined
("undefined").
Di undef
non è
undef
è un singolo valore. Non è che non stringa 'undef'
, non è una stringa vuota ''
e non il numero di 0
. Tutto questo — valori diversi.
▶ Run
use strict;
use warnings;
use Data::Dumper;
foreach my $var (undef, 'undef', '', 0) {
print Dumper $var;
}
In caso di hash se il valore della chiave undef
non è la stessa cosa che in хеше manca la chiave.
Come verificare la undef
Per verificare se un valore undef
utilizza la funzione defined
.
Il valore è undef
se la funzione defined
restituisce false:
▶ Run
use strict;
use warnings;
my $var;
if (!defined($var)) {
print 'var is undef';
}
Molto facile scrivere sabu is_undef
, che restituirà la verità se lei consegnato undef
:
▶ Run
use strict;
use warnings;
use feature qw(say);
use Data::Dumper;
sub is_undef {
my ($maybe_undef) = @_;
return !defined($maybe_undef);
}
my @arr = (1, undef, 'three');
foreach my $el (@arr) {
say is_undef($el) ? 'undef' : 'not undef';
}
Ma spesso non lo fanno, e utilizzano la funzione defined
senza qualsiasi tipo di legatura.
C'è un altro modo di come è possibile verificare che la variabile contiene undef è
utilizzare l'operatore ~~
(questo operatore è chiamato smartmatch
). Questo operatore è apparso in
Perl 5.10, ma a partire dalla versione di Perl 5.18 l'uso di questa istruzione genera un avviso
Smartmatch is experimental at script.pl line 8.
. Ecco un esempio di codice con questo operatore:
▶ Run
use strict;
use warnings;
my $var;
if ($var ~~ undef) {
print 'var is undef';
}
Spesso il modo migliore per verificare la undef
è una funzione defined
.
Perl undef
e la conversione in JSON
Libreria per lavorare con JSON in Perl trasformano Perl valore undef
in null
in JSON:
▶ Run
use strict;
use warnings;
use JSON::PP;
print encode_json {
a => undef,
};
Questo codice visualizza {"a":null}
.
E viceversa, durante la conversione da JSON null
diventa undef
:
▶ Run
use strict;
use warnings;
use JSON::PP;
use Data::Dumper;
print Dumper decode_json '[null]';
Questo codice verrà visualizzato:
Funzione ref
Il risultato del lavoro funzione ref
in relazione alla undef
è una stringa vuota ''
.
In questo senso undef
non è diverso da stringhe e numeri. Per undef
, stringhe e numeri funzione ref
restituisce una stringa vuota:
▶ Run
use strict;
use warnings;
use Data::Dumper;
foreach my $el ('asdf', undef, 100) {
print Dumper ref($el);
}
Un valore booleano
Quando si utilizza undef
a logiche operazioni undef
— questa è una bugia. Questo codice verrà visualizzato
la schermata di testo false
:
▶ Run
use strict;
use warnings;
use Data::Dumper;
if (undef) {
print 'true';
} else {
print 'false';
}
L'uso con le stringhe
Nel caso in cui utilizzare undef
nelle operazioni con le stringhe, invece undef
sarà
essere una stringa vuota ''
, ma anche verrà mostrato un messaggio di avviso.
▶ Run
use strict;
use warnings;
my $var;
print 'AAA' . $var . 'BBB';
▶ Run
use strict;
use warnings;
my $var;
if ($var eq '') {
print 'equal';
} else {
print 'not equal';
}
Nel primo caso, viene visualizzato un avviso Use of uninitialized value in concatenation (.) or string at script.pl line 10.
,
nel secondo caso Use of uninitialized value in string eq at script.pl line 8.
.
L'uso con i numeri
Nel caso in cui utilizzare undef
nelle operazioni con i numeri, invece undef
sarà
usato numero di 0
. ma sarà mostrato un messaggio di avviso.
▶ Run
use strict;
use warnings;
my $var;
print $var + 4;
▶ Run
use strict;
use warnings;
my $var;
if ($var == 0) {
print 'equal';
} else {
print 'not equal';
}
Nel primo caso, viene visualizzato un avviso Use of uninitialized value $var in addition (+) at script.pl line 8.
,
nel secondo caso Use of uninitialized value $var in numeric eq (==) at script.pl line 8.
.
Interessante notare che quando si utilizza l'operatore di incremento ++
avviso no:
▶ Run
use strict;
use warnings;
my $var;
print $var++;
Temi correlati
Altri articoli
Some parts of this page were machine translated.
Powered by Yandex.Translate
http://translate.yandex.com/