Fehlermeldung "Use of uninitialized value in string ..."
Reisser696
- perl
Hallo erstmal.
Ich schlage mich hier nun geraume Zeit mit der netten Fehlermeldung "Use of uninitialized value in string ..." rum und wundere mich langsam was ich denn hier falsch mache?
Es geht ganz einfach nur darum einen leeren Parameteraufruf abzufragen.
Lustigerweise habe ich dann das Beispiel hier aus selfhtml aufgerufen ... und dort kam auch die Fehlermeldung. Hier der Script nochmal (ein wenig gekürzt):
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Testausgabe</title>\n";
print "</head><body>\n";
if( $ENV{QUERY_STRING} eq "" ) {
print "<b>Dem Script wurden keine Daten übergeben!</b>\n";
}
print "</body></html>\n";
Wo liegt da nun also bitte der Fehler?? Ich rauf mir hier schon die Haare *g*
你好 Reisser696,
Ich schlage mich hier nun geraume Zeit mit der netten Fehlermeldung "Use of uninitialized value in string ..." rum und wundere mich langsam was ich denn hier falsch mache?
Das ist keine Fehlermeldung, das ist eine Warnung. Kleiner, aber feiner Unterschied.
Um in Perl abzufragen, ob ein Wert definiert ist, gibt es defined:
#!/usr/bin/perl -w
use CGI qw/param/;
print "Content-Type: text/plain\015\012\015\012";
if(defined param("abc")) {
print "Definiert!";
}
else {
print "Undefiniert!";
}
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Testausgabe</title>\n";
print "</head><body>\n";if( $ENV{QUERY_STRING} eq "" ) {
print "<b>Dem Script wurden keine Daten übergeben!</b>\n";
}
print "</body></html>\n";
>
> Wo liegt da nun also bitte der Fehler?? Ich rauf mir hier schon die Haare \*g\*
Du solltest lieber so prüfen:
~~~perl
if(!defined($ENV{QUERY_STRING}) || $ENV{QUERY_STRING} eq "") {
print "<b>Dem Script wurden keine Daten übergeben!</b>\n";
}
再见,
克里斯蒂安
Danke erstmal für die Antwort.
Aber nur so ganz nebenbei: sollte ein Beispiel von selfhtml nicht so sauber sein dass es keine Warnmeldung generiert?
Wenn nicht das Beispiel hier "sauber" sein sollte - was sonst?
Dein Script funktioniert bei mir leider auch nicht - bzw gibt es zwar keine Warnmeldung raus - sagt aber grundsätzlich immer dass keine Daten übergeben wurden ;)
Meine Bash ist V 3.1.17(1) auf einem Suse Enterprise 10 SP2 falls das von Belang ist ...
你好 Reisser696,
Aber nur so ganz nebenbei: sollte ein Beispiel von selfhtml nicht so sauber sein dass es keine Warnmeldung generiert?
Das frag lieber den Autoren des Perl-Kapitels.
Dein Script funktioniert bei mir leider auch nicht - bzw gibt es zwar keine Warnmeldung raus - sagt aber grundsätzlich immer dass keine Daten übergeben wurden ;)
Welches Script? Mein erstes Beispiel oder meine Korrektur deines Beispiels? Meine Korrektur deines Beispiels funktioniert einwandfrei nach deinem Schema: einfach etwas an den Query-String anhängen. Mein erstes Beispiel? Das erwartet einen Parameter in der Form abc=wert im Query-String.
Meine Bash ist V 3.1.17(1) auf einem Suse Enterprise 10 SP2 falls das von Belang ist ...
Deine Bash? Führst du das Script in der Shell aus? In dem Fall kannst du aber nicht erwarten, dass du via QUERY_STRING-Environment-Variable auf die Parameter zugreifen kannst, das ist eine reine CGI-Konvention.
Auf der Shell kannst du auf Kommandozeilen-Parameter mit Hilfe des @ARGV-Arrays zugreifen:
#!/usr/bin/perl -w
use strict;
print "Command line arguments:\n\n";
print $_,"\n" foreach @ARGV;
Aufruf via ./test.pl a b c d
.
再见,
克里斯蒂安
Aber nur so ganz nebenbei: sollte ein Beispiel von selfhtml nicht so sauber sein dass es keine Warnmeldung generiert?
Das sind keine Perlbeispiel in selfhtml. selfhtml ist keine gute Quelle um Perl zu lernen, es ist höchstens mal als Nachschlagewerk zu gebrauchen.
Struppi.