it-swarm.com.de

Wie kann man überprüfen, ob eine Zeichenfolge in Perl leer ist?

Ich habe gerade mit diesem Code überprüft, ob eine Zeichenfolge leer ist:

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

Und auch das selbe mit dem nicht gleich Operator ...

if ($str != "")
{
  // ...
}

Dies scheint zu funktionieren (glaube ich), aber ich bin nicht sicher, ob es der richtige Weg ist oder ob es unvorhergesehene Nachteile gibt. Etwas fühlt sich einfach nicht richtig an.

85
Nick Bolton

Verwenden Sie für Zeichenfolgenvergleiche in Perl eq oder ne:

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

Das == und != -Operatoren sind numerische Vergleichsoperatoren. Sie werden versuchen, beide Operanden in ganze Zahlen umzuwandeln, bevor sie verglichen werden.

Weitere Informationen finden Sie auf der Manpage perlop .

121
Greg Hewgill
  1. Aufgrund der Art und Weise, wie Zeichenfolgen in Perl gespeichert werden, wird das Abrufen der Länge einer Zeichenfolge optimiert.
    if (length $str) ist eine gute Methode, um zu überprüfen, ob eine Zeichenfolge nicht leer ist.

  2. Wenn Sie sich in einer Situation befinden, in der Sie noch nicht vor undef geschützt haben, lautet der Haken für "nicht leer", der nicht warnt, if (defined $str and length $str).

87
hobbs

Wie bereits von mehreren Personen erwähnt, ist eq hier der richtige Operator.

Wenn du use warnings; In Ihrem Skript erhalten Sie Warnungen dazu (und zu vielen anderen nützlichen Dingen). Ich würde empfehlen use strict; auch.

9

Sie möchten wahrscheinlich "eq" anstelle von "==" verwenden. Wenn Sie sich über einige Edge-Fälle Gedanken machen, sollten Sie auch nach undefinierten Fällen suchen:

if (not defined $str) {

# this variable is undefined

}
9
DmitryK

Das eigentliche Konzept einer "richtigen" Vorgehensweise, abgesehen von der Verwendung von CPAN, gibt es in Perl nicht.

Sowieso sind das numerische Operatoren, die Sie verwenden sollten

if($foo eq "")

oder

if(length($foo) == 0)
4
whatsisname

Um nach einer leeren Zeichenfolge zu suchen, können Sie auch wie folgt vorgehen

if (!defined $val || $val eq '')
{
    # empty
}
0
Roland Ayala