Quelle est la bonne façon de vérifier si une chaîne est vide en Perl?
Je viens d'utiliser ce code pour vérifier si une chaîne est vide:
if ($str == "")
{
// ...
}
Et aussi la même chose avec le pas est égal à l'opérateur...
if ($str != "")
{
// ...
}
Cela semble fonctionner (je pense), mais je ne suis pas sûr que c'est de la bonne façon, ou si il y a un imprévu inconvénients. Quelque chose ne se sent pas le droit à ce sujet.
Vous devez vous connecter pour publier un commentaire.
Pour les comparaisons de chaînes en Perl, l'utilisation
eq
oune
:La
==
et!=
opérateurs sont numérique opérateurs de comparaison. Ils vont tenter de convertir les deux opérandes entiers avant de les comparer.Voir le perlop page de manuel pour plus d'informations.
En raison de la façon dont les chaînes de caractères sont stockées dans Perl, obtenir la longueur d'une chaîne est optimisé.
if (length $str)
est un bon moyen de vérifier qu'une chaîne est non vide.Si vous êtes dans une situation où vous ne l'avez pas déjà en garde contre
undef
, puis le fourre-tout pour les "non vide" qui ne prévient pas estif (defined $str and length $str)
.if (length($str))
est une approche agréable et de ne pas échouer si la variable n'est pas définie.Comme déjà mentionné par plusieurs personnes,
eq
est le bon opérateur.Si vous
use warnings;
dans votre script, vous obtiendrez des mises en garde à ce sujet (et bien d'autres choses utiles); je recommandeuse strict;
ainsi.use strict
mais je suis à jour de quelques vieux code, donc quand j'ajoute ce que je reçois des centaines d'erreurs. Je vais probablement corriger quelques jours.Vous voudrez probablement utiliser "eq" au lieu de "==".
Si vous vous inquiétez au sujet de certains cas de bord, vous pouvez également vouloir vérifier pour non-défini:
La notion même de "bonne" façon de faire quoi que ce soit, en dehors de l'aide CPAN, est inexistante en Perl.
De toute façon ce sont les opérateurs numériques, vous devez utiliser
ou
if ($foo == "")
, par exemple, est définitivement tort moins que vous ne signifie réellement être des tests pour savoir si$foo
, évalué dans le contexte numérique, a une valeur de 0 (dans ce cas, il serait toujours être mieux écrit queif ($foo == 0)
, en tant que de plus en plus d'exprimer clairement votre intention).À vérifier pour une chaîne vide, vous pouvez aussi faire quelque chose comme suit