Also ich habe das jetzt mal kurz nachsimuliert, aber wenn ich so etwas schreibe:
my $string = ' ';
und if(!defined $label) oder if(!$label) darauf anwende, geht der String schon nicht mehr als leerer String durch. Solche Tricks der Benutzer will ich natürlich unterbinden.
Es funktioniert übrigens nur, wenn der String keiner ist, also ''.
Also. Wenn du die Eingabe von CGI skripten prüfen willst, ist der Parameter undefined wenn nichts in einem Textfeld eingegeben wurde. Wenn Leerzeichen eingeben wurden, ist er natürlich nicht mehr undefined und auch nicht leer.
Wenn du solche Eingaben verhindern willst, solltest du dies dort prüfen, wo du mit den Variabeln arbeitest, sonst blickst du nämlich irgendwann nicht mehr durch, was du wo mit ihnen machst.
Ich würde eine Funktion schreiben (die nebenbei bemerkt ständig gebraucht wird, daher in so 'ne Art Standardmodul rein sollte), die die Leerzeichen stript.
entweder:
sub trim
{
$_[0] =~ s/^\s+//;
$_[0] =~ s/\s+$//;
$_[0];
}
oder flexibler:
sub trim{return rtrim(ltrim($_[0]));}
sub rtrim{$_[0] =~ s/\s+$//;$_[0];}
sub ltrim{$_[0] =~ s/^\s+//;$_[0];}
und dann die entsprechende Funktion aufrufen, wenn du die Eingabe bearbeitest und die Gültigkeit prüfst.
Eine Eingabe direkt am Anfang abändern kann u.U. später langwierige Fehlersuche nach sich ziehen.
Struppi.