Acabo de usar este código para verificar si una cadena está vacía:
if ($str == "")
{
// ...
}
Y también lo mismo con el operador no es igual ...
if ($str != "")
{
// ...
}
Esto parece funcionar (creo), pero no estoy seguro de que sea la forma correcta, o si hay algún inconveniente imprevisto. Algo simplemente no se siente bien al respecto.
perl
string
comparison
Nick Bolton
fuente
fuente
Debido a la forma en que las cadenas se almacenan en Perl, se optimiza obtener la longitud de una cadena.
if (length $str)
es una buena forma de comprobar que una cadena no está vacía.Si se encuentra en una situación en la que aún no se ha protegido
undef
, entonces el truco para "no vacío" que no advertirá esif (defined $str and length $str)
.fuente
if (length($str))
es un buen enfoque y no falla si la variable no está definida.Probablemente desee utilizar "eq" en lugar de "==". Si le preocupan algunos casos extremos, es posible que también desee verificar si hay indefinidos:
fuente
Como ya han mencionado varias personas, aquí
eq
es el operador adecuado.Si está
use warnings;
en su secuencia de comandos, recibirá advertencias sobre esto (y muchas otras cosas útiles); Yo también lo recomiendouse strict;
.fuente
use strict
pero estoy actualizando un código antiguo, así que cuando agrego esto, obtengo cientos de errores. Probablemente los arreglaré algún día.El concepto mismo de una forma "adecuada" de hacer cualquier cosa, además de utilizar CPAN, no existe en Perl.
De todos modos, esos son operadores numéricos, debe usar
o
fuente
if ($foo == "")
, por ejemplo, es definitivamente incorrecto a menos que realmente quiera probar si$foo
, evaluado en contexto numérico, tiene un valor de 0 (en cuyo caso aún estaría mejor escrito comoif ($foo == 0)
, ya que eso expresa más claramente su intención).Para comprobar si hay una cadena vacía, también puede hacer algo de la siguiente manera
fuente