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 non égal ...
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 pas.
Pour les comparaisons de chaînes en Perl, utilisez eq
ou ne
:
if ($str eq "")
{
// ...
}
Le ==
et !=
Les opérateurs sont des opérateurs de comparaison numériques . Ils essaieront de convertir les deux opérandes en nombres entiers avant de les comparer.
Consultez la page de manuel perlop pour plus d'informations.
En raison de la manière dont les chaînes sont stockées dans 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 vous trouvez dans une situation où vous ne vous êtes pas déjà protégé contre undef
, alors tout le monde qui cherche à "non vide" et qui ne vous prévient pas est if (defined $str and length $str)
.
Comme déjà mentionné par plusieurs personnes, eq
est le bon opérateur ici.
Si vous use warnings;
dans votre script, vous recevrez des avertissements à ce sujet (et de nombreuses autres choses utiles); Je recommanderais use strict;
ainsi que.
Vous voudrez probablement utiliser "eq" au lieu de "==". Si vous vous inquiétez de certains cas Edge, vous pouvez également vouloir rechercher les éléments non définis:
if (not defined $str) {
# this variable is undefined
}
Le concept même d'une manière "correcte" de faire n'importe quoi, hormis l'utilisation de CPAN, n'existe pas en Perl.
Quoi qu'il en soit, ce sont des opérateurs numériques, vous devriez utiliser
if($foo eq "")
ou
if(length($foo) == 0)
Pour rechercher une chaîne vide, vous pouvez également effectuer les opérations suivantes.
if (!defined $val || $val eq '')
{
# empty
}