Schrift
[thread]12272[/thread]

Warnmeldungen unterdrücken bzw. Code optimieren

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Magic
 2008-07-30 11:47
#112884 #112884
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo Zusammen,
ich habe mir in letzter Zeit mal die Logfiles durchgesehen und mit erschrecken festgestellt, dass sehr oft Warnmeldungen von Perl dabei sind.
Sehr beliebt ist
Code: (dl )
"Use of uninitialized value in concatenation (.) or string at blablabla"


Die Warnung bin ich selbst schuld, da ich z.B. eine Variable $fehler nur dann mit einer Meldung "fülle", wenn ein Fehler aufgetreten ist und die Variable bei der Ausgabe z.B. einfach mit an eine andere Variable hänge
Code: (dl )
$string .= $fehler 


Meine Frage ist nun, ob und wie ich es durch optimierung des Codes verhindern kann, dass diese Warnmeldung ausgegeben wird.
Muss ich tatsächlich jede Variable vor dem benutzen testen?
Oder kann und sollte ich die Warnungen einfach ignorieren?

Grüße,
Stefan
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
nepos
 2008-07-30 12:02
#112885 #112885
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm:
Code (perl): (dl )
$string .= $fehler ||  '';
moritz
 2008-07-30 12:13
#112886 #112886
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
nepos+2008-07-30 10:02:14--
Hm:
Code (perl): (dl )
$string .= $fehler ||  '';


Schlechte Idee, wenn $fehler den Wert 0 enthält.
Unter perl 5.10 könnte man
Code (perl): (dl )
 $string .= $fehler // ''


Ich würde eher sowas machen:
Code: (dl )
 no warnings 'uninitialized';
Magic
 2008-07-30 12:19
#112887 #112887
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke für die schnellen Antworten, aber was ist bei kontrukten wie solchen:
Code: (dl )
print "Bla bla" . $var1 . "BlubBlub" . $error;


oder

Code: (dl )
print "Bla bla $var1 BlubBlub $error";
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
pq
 2008-07-30 12:21
#112888 #112888
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
nepos+2008-07-30 10:02:14--
Hm:
Code (perl): (dl )
$string .= $fehler ||  '';

das allein ist womöglich ein schlechter tip.
sowohl $var || 0 als auch $var || ''
kann das falsche sein, und ich möchte gar nicht wissen, wieviel
zeit ich insgesamt schon damit verbraucht habe, bugs zu fixen,
die durch code wie diesen entstanden sind.
$var || 0 kann falsch sein, wenn auch ein leerer string korrekt
sein kann und nicht in 0 umgewandelt werden soll.
$var || '' kann falsch sein, wenn die 0 korrekt sein kann und nicht in
den leeren string umgewandelt werden soll.
auch wenns weh tut, man sollte auf defined prüfen.
erst ab perl 5.10 gibts auch
$var // ''
das produziert nur dann den leerstring, wenn $var undef ist.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Magic
 2008-07-30 12:41
#112889 #112889
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
pq+2008-07-30 10:21:04--
auch wenns weh tut, man sollte auf defined prüfen.


autsch... wenn das die einzige Möglichkeit ist, dann lasse ich die Warnmeldungen lieber weiter lustig über die Konsole turnen, auch wenns nervt. Zumal die ja auch weg sind, wenn strict nicht mehr geladen wird.
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
moritz
 2008-07-30 12:46
#112890 #112890
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Magic+2008-07-30 10:41:37--
pq+2008-07-30 10:21:04--
auch wenns weh tut, man sollte auf defined prüfen.


autsch... wenn das die einzige Möglichkeit ist, dann lasse ich die Warnmeldungen lieber weiter lustig über die Konsole turnen, auch wenns nervt. Zumal die ja auch weg sind, wenn strict nicht mehr geladen wird.


Hast du die anderen Antworten nicht gelesen? Wenn dich die Warnungen stören kannst du sie ausschalten. Und von "strict nicht mehr laden" kann ich auch nur abraten...
pq
 2008-07-30 13:10
#112892 #112892
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ein gutes skript läuft auch produktiv mit warnings und strict.
entweder du bist an den fraglichen stellen sicher, dass undef ok ist, dann nimm
dort 'no warnings ...', wie dir schon gesagt wurde, oder du musst prüfen.
warnings abschalten ist irgendwie nicht der sinn der sache. eine warnung ist
dafür da, dich zu warnen "hey, du machst hier sehr wahrscheinlich etwas falsch".
die beiden möglichen reaktionen sind "stimmt, könnte sein, ich prüfe mal lieber
auf defined" oder "schon ok, das undef, ich sage an der stelle 'no warnings "uninitialized"'.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Magic
 2008-07-30 13:03
#112893 #112893
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
Doch, hab die anderen Antworten gelesen... :o)
no warnings... wäre eine alternative. Momentan schalte ich strict einfach ab. Bei der Arbeit am Script ists natürlich an, nur in der Produktivumgebung oder auf dem Server ists halt aus, um den Warnmeldungsoverhead zu unterdrücken.
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
nepos
 2008-07-30 13:25
#112894 #112894
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ihr habt absolut recht, dass es im Allgemeinen eher schlecht ist, so ein Konstrukt zu benutzen, da der Fall 0 und '' gleich behandelt werden...

Hatte da für $fehler grade nur Strings vor meinem geistigen Auge...
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-07-30 11:47.