Schrift
[thread]228[/thread]

Use of uninitialized value in concatenation (.) or

Leser: 2


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
x-man
 2004-04-09 17:15
#2028 #2028
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
my $test = "value|value||value";
my @array = split(/\|/, $test);
print $array[2]; #<- Fehler "Use of uninitialized value in concatenation (.) or string"


Das Gleiche beim Hash auch, wenn key einen nullstring erhält.

Kann mir bitte jemand sagen, wie ich den Fehler unterdrücken kann?\n\n

<!--EDIT|x-man|1081516906-->
Ronnie
 2004-04-09 17:46
#2029 #2029
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hmm, bei mir kommt da keine Fehlermeldung:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $test = "value|value||value";
my @array = split(/\|/, $test);
print $array[2];
print Dumper(\@array);

Poste vieleicht mal etwas mehr Code.
x-man
 2004-04-09 17:53
#2030 #2030
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
Die Fehlermeldung wird nicht angezeigt, sondern nur stillschweigend in die error.log Datei des Servers (bei mir ist es der Xitami) geschrieben. Das Programm läuft ganz normal.
Ronnie
 2004-04-09 18:02
#2031 #2031
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
wenn du ein Skript auf der Console startest bekommst du beides: die normale Ausgabe auf STDOUT und Warnungen/Fehler auf STDERR - bei CGIs wird das gesplittet. Wenn du ein CGI oder ein Snippet also auf der Console aufrufst, musst du auch die Warnungen und Fehler zu Gesicht bekommen. Wenn du CGIs debuggst solltest du folgendes verwenden:
Code: (dl )
use CGI::Carp qw (fatalsToBrowser warningsToBrowser);

dann bekommst du Fehler und Warnungen an den Browser ausgegeben.
x-man
 2004-04-09 19:12
#2032 #2032
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
use CGI::Carp qw (fatalsToBrowser warningsToBrowser);

diese Zeile habe ich auch im Code, leider wird der Fehler nicht an den Browser weitergeleitet.
format_c
 2004-04-09 20:36
#2033 #2033
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Alternativ kannst du einfach einen leereh String ausgeben:
Code: (dl )
print $array[2] || '';


Gruß Alex
format_c
 2004-04-09 20:42
#2034 #2034
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=x-man,09.04.2004, 17:12]use CGI::Carp qw (fatalsToBrowser warningsToBrowser);

diese Zeile habe ich auch im Code, leider wird der Fehler nicht an den Browser weitergeleitet.[/quote]
Die Fatal Errors werden offensichtlich im Browser angezeit. Was du da produzierst ist eine Warnung. Dazu musst du wie oben die entsprechende Symboltabelle importeren (mit z.B. qw) , nach der ersten HTTP-Header ausgabe die Funktion noch mit einem true-Wert aktiveren, dann kannst du die Warnung als HTML-Kommentare im HTML-Quellcode sehen.
BsP:
Code: (dl )
1
2
3
4
5
6
7
8
9
use warnings;
use CGI::Carp qw/warningsToBrowser/;

# trallala hier passiert was

print "Content-type: text/html\n\n";
warningsToBrowser(1);
print undef;
exit;


Gruß Alex\n\n

<!--EDIT|format_c|1081529098-->
[E|B]
 2004-04-09 22:42
#2035 #2035
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wieso sollte da denn eine Fehlermeldung kommen? Kein Wert ist auch ein Wert. Wenn ich schreibe "print $var" obwohl $var leer ist, passiert doch auch nichts.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
format_c
 2004-04-09 22:49
#2036 #2036
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@[E|B]: Keine Fehlermeldung. Eine Warnung wenn man entweder use warnings verwendet oder den Programmswitch w benutzt.

Wenn du die Warnungen nicht an den Browser weiterleitest landen sie einfach im error_log des Servers. Oft funktioniert das Programm dann troztdem. Aber ich hatte mal dass Phänomen, dass ein programm mal nen 500 verursacht hat und mal funktioniert hat. Als ich mir die warnings ausgegeben hat (weil ich keinen Zugriff auf die Logfiles hatte) hab ich sofort gesehen wo das Problem lag.

Du hast nämlich dann ein Problem wenn die Warnung vor dem HTTP-Header ausgegeben wird.

Gruß Alex
x-man
 2004-04-10 00:07
#2037 #2037
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
[E|B
,09.04.2004, 20:42]Wieso sollte da denn eine Fehlermeldung kommen? Kein Wert ist auch ein Wert. Wenn ich schreibe "print $var" obwohl $var leer ist, passiert doch auch nichts.

Du siehst die Meldung nur nicht, weil es nicht an den Browser geschickt wird. Die Fehlermeldung wird aber in die error.log geschrieben. Das Programm funktioniert trotzdem "einwandfrei" aber die Meldung nervt ein bisschen ;-)
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2004-04-09 17:15.