undef
em Perl
undef
, na linguagem de programação Perl — é um dos valores que pode estar contido em uma variável.
Se você não atribuir o valor da variável, o variável será undef
.
Aqui está um exemplo de programa Perl:
▶ Run
use strict;
use warnings;
use Data::Dumper;
my $var;
print Dumper $var;
$var = 123;
print Dumper $var;
$var = undef;
print Dumper $var;
Este programa irá imprimir na tela:
$VAR1 = undef;
$VAR1 = 123;
$VAR1 = undef;
Primeiro, nós anunciamos uma variável, mas não atribuiu a ela qualquer valor: my $var;
.
Mais com a ajuda de print Dumper $var;
derivaram-se as informações sobre o valor desta variável para a tela
(visto que uma variável contém undef
). Depois que se apropriaram de um número variável de 123
e
é mostrado na tela. E então, com o código $var = undef;
nós atribuiu a variável undef
e, novamente,
tiraram detalhes sobre o assunto.
undef
pode ser um elemento na matriz, ou o valor em хеше:
▶ Run
use strict;
use warnings;
use Data::Dumper;
my @arr = (1, undef, 'three');
print Dumper \@arr;
my %h = (
a => undef,
);
print Dumper \%h;
Muitas vezes undef
é utilizado como um sinalizador. Por exemplo, pode ser um recurso que sempre retorna o número, mas em caso de erro retorna undef
.
Nome undef
vem da palavra em inglês undefined
("frase indefinida").
Que undef
não é
undef
é o valor individual. Não é nenhuma linha de 'undef'
, não é uma seqüência de caracteres vazia ''
e não é o número de 0
. Tudo isso são valores diferentes.
▶ Run
use strict;
use warnings;
use Data::Dumper;
foreach my $var (undef, 'undef', '', 0) {
print Dumper $var;
}
Em caso de hash se o valor da chave undef
não é o mesmo que хеше falta a tal chave.
Como verificar o undef
Para verificar se o valor undef
usa a função defined
.
O valor é undef
se a função defined
retorna false:
▶ Run
use strict;
use warnings;
my $var;
if (!defined($var)) {
print 'var is undef';
}
É muito fácil escrever сабу is_undef
, que vai retornar a verdade se entregaram 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';
}
Mas mais frequentemente do que não fazem, e usam o recurso de defined
, sem qualquer subordinação.
Não existe outra maneira de como pode-se verificar que a variável contém undef é
usar o operador ~~
(este operador é chamado de smartmatch
). Este operador apareceu em
Perl 5.10, mas a partir da versão Perl 5.18 o uso deste operador emite um aviso
Smartmatch is experimental at script.pl line 8.
. Aqui está um exemplo de código com este operador:
▶ Run
use strict;
use warnings;
my $var;
if ($var ~~ undef) {
print 'var is undef';
}
Mais frequentemente do que a melhor maneira é a verificação de undef
é a função defined
.
Perl undef
e conversão para JSON
Biblioteca para trabalhar com JSON no Perl convertem Perl valor undef
em null
em JSON:
▶ Run
use strict;
use warnings;
use JSON::PP;
print encode_json {
a => undef,
};
Este código irá imprimir na tela {"a":null}
.
E vice-versa, quando a conversão de JSON null
torna-se undef
:
▶ Run
use strict;
use warnings;
use JSON::PP;
use Data::Dumper;
print Dumper decode_json '[null]';
Este código irá imprimir na tela:
A função ref
O resultado do trabalho da função ref
aplicada ao undef
é uma cadeia de caracteres vazia ''
.
Neste plano undef
não é diferente de linhas e números. Para undef
, linhas e números com a função de ref
retorna a string vazia:
▶ Run
use strict;
use warnings;
use Data::Dumper;
foreach my $el ('asdf', undef, 100) {
print Dumper ref($el);
}
Um valor booleano
Quando você usa o undef
, em unidades lógicas, operações undef
— isso é uma mentira. Este código irá
a tela de texto false
:
▶ Run
use strict;
use warnings;
use Data::Dumper;
if (undef) {
print 'true';
} else {
print 'false';
}
O uso de cadeias de caracteres
No caso de se usar undef
em operações com cadeias de caracteres, então em vez de undef
será
usado uma seqüência de caracteres vazia ''
, mas também será mostrado um aviso.
▶ 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';
}
No primeiro caso, será mostrado um aviso Use of uninitialized value in concatenation (.) or string at script.pl line 10.
,
no segundo caso, Use of uninitialized value in string eq at script.pl line 8.
.
A utilização de números
No caso de se usar undef
operações com números, em vez de undef
será
usado o número de 0
. mas, assim como será mostrado um aviso.
▶ 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';
}
No primeiro caso, será mostrado um aviso Use of uninitialized value $var in addition (+) at script.pl line 8.
,
no segundo caso, Use of uninitialized value $var in numeric eq (==) at script.pl line 8.
.
Interessante que quando você usa o operador de incremento ++
aviso não:
▶ Run
use strict;
use warnings;
my $var;
print $var++;
Temas relacionados
Outros artigos
Some parts of this page were machine translated.
Powered by Yandex.Translate
http://translate.yandex.com/