89 votes

Quelle est la bonne façon de vérifier si une chaîne est vide dans 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 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.

125voto

Greg Hewgill Points 356191

Pour les comparaisons de chaînes en Perl, utilisez eq ou ne :

 if ($str eq "")
{
  // ...
}
 

Les opérateurs == et != sont des opérateurs de comparaison numériques . Ils essaieront de convertir les deux opérandes en nombres entiers avant de les comparer.

Voir la page de manuel perlop pour plus d'informations.

89voto

hobbs Points 71946
  1. 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.

  2. Si vous vous trouvez dans une situation où vous ne vous êtes pas déjà protégé contre undef , la fourre-tout pour "non vide" qui ne vous avertit pas est if (defined $str and length $str) .

9voto

Matthew Slattery Points 21628

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 aussi use strict; .

9voto

DmitryK Points 3824

Vous voudrez probablement utiliser "eq" au lieu de "==". Si vous vous inquiétez de certains cas critiques, vous pouvez également vouloir rechercher des non définis:

 if (not defined $str) {

# this variable is undefined

}
 

4voto

whatsisname Points 2628

Le concept même d'une manière "correcte" de faire n'importe quoi, mis à part l'utilisation de CPAN, n'existe pas en Perl.

En tout cas, ce sont des opérateurs numériques, vous devriez utiliser

 if($foo eq "")
 

ou

 if(length($foo) == 0)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X