Acabei de usar este código para verificar se uma string está vazia:
if ($str == "")
{
// ...
}
E também o mesmo com o operador diferente de ...
if ($str != "")
{
// ...
}
Isso parece funcionar (eu acho), mas não tenho certeza se é a maneira correta, ou se há alguma desvantagem imprevista. Algo simplesmente não parece certo sobre isso.
perl
string
comparison
Nick Bolton
fonte
fonte
Devido à maneira como as strings são armazenadas em Perl, obter o comprimento de uma string é otimizado.
if (length $str)
é uma boa maneira de verificar se uma string não está vazia.Se você estiver em uma situação contra a qual ainda não se protegeu
undef
, o ponto-chave para "não vazio" que não avisará éif (defined $str and length $str)
.fonte
if (length($str))
é uma boa abordagem e não falha se a variável não for definida.Você provavelmente deseja usar "eq" em vez de "==". Se você se preocupa com alguns casos extremos, também pode querer verificar se há indefinido:
fonte
Como já mencionado por várias pessoas,
eq
é a operadora certa aqui.Se você estiver
use warnings;
em seu script, receberá avisos sobre isso (e muitas outras coisas úteis); Eu também recomendariause strict;
.fonte
use strict
mas estou atualizando alguns códigos antigos, então quando adiciono isso obtenho centenas de erros. Provavelmente vou consertá-los algum dia.O próprio conceito de uma maneira "adequada" de fazer qualquer coisa, além de usar o CPAN, não existe no Perl.
De qualquer forma, esses são operadores numéricos, você deve usar
ou
fonte
if ($foo == "")
, por exemplo, é definitivamente errado, a menos que você realmente queira testar se$foo
, avaliado em contexto numérico, tem um valor de 0 (caso em que ainda seria melhor escrito comoif ($foo == 0)
, já que expressa mais claramente seu intenção).Para verificar se há uma string vazia, você também pode fazer algo da seguinte maneira
fonte