Je viens d'utiliser ce code pour vérifier si une chaîne est vide:
if ($str == "")
{
// ...
}
Et aussi la même chose avec l'opérateur not equals ...
if ($str != "")
{
// ...
}
Cela semble fonctionner (je pense), mais je ne suis pas sûr que ce soit la bonne façon, ou s'il y a des inconvénients imprévus. Quelque chose ne va tout simplement pas.
perl
string
comparison
Nick Bolton
la source
la source
En raison de la façon dont les chaînes sont stockées en Perl, l'obtention de la longueur d'une chaîne est optimisée.
if (length $str)
est un bon moyen de vérifier qu'une chaîne n'est pas vide.Si vous êtes dans une situation où vous ne vous êtes pas déjà prévenu
undef
, alors le fourre-tout pour "non-vide" qui ne vous avertira pas estif (defined $str and length $str)
.la source
if (length($str))
c'est une bonne approche et n'échoue pas si la variable n'est pas définie.Vous voudrez probablement utiliser "eq" au lieu de "==". Si vous vous inquiétez de certains cas extrêmes, vous pouvez également vérifier si non défini:
la source
Comme déjà mentionné par plusieurs personnes,
eq
est le bon opérateur ici.Si vous êtes
use warnings;
dans votre script, vous recevrez des avertissements à ce sujet (et bien d'autres choses utiles); Je recommanderaisuse strict;
aussi.la source
use strict
mais je mets à jour un ancien code, donc quand j'ajoute cela, j'obtiens des centaines d'erreurs. Je vais probablement les réparer un jour.Le concept même d'une manière «correcte» de faire quoi que ce soit, à part l'utilisation de CPAN, est inexistant en Perl.
Quoi qu'il en soit, ce sont des opérateurs numériques, vous devriez utiliser
ou
la source
if ($foo == "")
, par exemple, est définitivement faux , sauf si vous avez réellement moyen à tester pour savoir si$foo
, évalué dans le contexte numérique, a une valeur de 0 (auquel cas il serait encore mieux écritif ($foo == 0)
, car cela exprime plus clairement votre intention).Pour rechercher une chaîne vide, vous pouvez également faire quelque chose comme suit
la source