Schrift
[thread]8063[/thread]

warnings (Seite 4)

Leser: 1


<< |< 1 2 3 4 5 6 >| >> 52 Einträge, 6 Seiten
renee
 2006-06-09 15:23
#67080 #67080
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Froschpopo,09.06.2006, 12:26]dann müsste ja bei ner variablendeklarierung von z.b.
Code: (dl )
my $var;

auch dieselbe meldung kommen. Du sagst ja, dass die kommt, wenn eine variable einen undef wert hat. ist ja im obigen code auch der fall.
Aber genau diesen Code hab ich auch schon öfter in den hier geposteten codesnipplets und anderen dokus gefunden! Dann sind diese Script ab jetzt scheiße und die Programmierer derer für mich gestorben. Ich werd nachher alle aufsuchen und eine Liste mit den ganzen Perlbanausen aufstellen und auf einem thailändischen host veröffentlichen. Weil irgendwann muss man auch mal strafen, sonst wird das nie besser[/quote]
liesmal den Text der Warnung genauer! Dort steht was von use of ... benutzt Du die Variable nicht, sondern deklarierst sie nur. Die Warnung kommt, wenn Du eine Variable, deren Wert undef ausgibst (print, printf,...) oder anderweitig verwendest (eq, ne, Patternmatching,...).

Wenn Du use warnings öfters benutzen würdest, wüsstest Du, dass die Deklarationwarnings-sicher ist...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2006-06-09 15:28
#67081 #67081
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
also nochmal:
Code: (dl )
1
2
3
4
5
6
7
$ perl -wle'
use strict;
my $var;
if ($var eq "etwas") {
print "$var enthält etwas"
}'
Use of uninitialized value in string eq at -e line 4.

dann kann ich ja direkt jede if anweisung durch if (defined $var and $var eq 'etwas') ersetzen...
renee
 2006-06-09 15:29
#67082 #67082
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Froschpopo,09.06.2006, 13:11]@givenDragon

aber das macht pq ja in ihrem beispiel nicht[/quote]
Deswegen bekommt sie ja auch eine Warnung!

Du solltest schon alles lesen...

Das gibt ne Warnung:
Code: (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl

use strict;
use warnings;
my $var;

print $var;


Das hier nicht:
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use strict;
use warnings;
my $var;

$var = 99;
print $var;


Unterschied aufgefallen?

Mit Deinem Code
Code: (dl )
1
2
3
4
5
if($var){
}
else{
# nicht definiert
}


prüfst Du nicht auf Definiertheit, sondern, ob in $var ein "wahrer" Wert steht. Wenn $var den Wert 0 hat, würde es auch in den else-Zweig gehen, obwohl der Wert definiert ist...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2006-06-09 15:32
#67083 #67083
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
aber was ist denn so schlimm daran, wenn meine $var undef ist?? Icch will sie doch nur vorausschauend deklarieren, weil ich ihr den wert vielleicht später zuweisen will, zum zeitpunkt der dekl. aber den wert noch nicht kenne!
GwenDragon
 2006-06-09 15:36
#67084 #67084
User since
2005-01-17
14538 Artikel
Admin1
[Homepage]
user image
Das Problem ist:
manche Funktionen bzw. Operatoren von Perl arbeiten eben nicht mit undefinierten Variablen.
Deswegen sind Warnungen nützlich.
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

renee
 2006-06-09 15:38
#67085 #67085
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da ist gar nichts schlimm dran. Du musst dann halt auf defined überprüfen wenn Du die Variable verwenden willst. Aber das wurde hier ja schon mehrfach gesagt.

Das hier ist vollkommen ok!
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;

my $var;

for(0..2){
if(defined($var) and $var == 99){
print '$var ist definiert und 99';
}
else{
print 'ich bin im else-Teil';
}
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2006-06-09 16:11
#67086 #67086
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
@froschpopo: in deinem original-artikel wolltest du wissen, warum die
warnung auftaucht, und wie du sie umgehen kannst. nehm ich mal an.
eine menge leute haben dir mehrere möglichkeiten gezeigt.
keine davon war dir genehm, und du behauptest nun selbst, dass du
ein schlechter mensch seist, weil du if ($var) benutzt.
hallo? erde an froschpopo? du kannst if ($var) benutzen, solange
du lustig bist, und das hat überhaupt nichts mit deinem original-
statement zu tun. wie kommst du jetzt auf das statement?

ich schlage dir dringend vor:
1. verstehe den unterschied zwischen deklarieren (my $var) und
initialisieren ($var = 23).
2. verstehe den unterschied zwischen abfragen auf wahrheit (if $var),
abfragen auf definiertheit (if defined $var) und abfrage auf
string-gleichheit (if $var eq 'blubber')

du darfst: gerne selbst rumprobieren. du darfst nicht: wahllos vermutungen
hier posten. das tust du nämlich schon oft genug.\n\n

<!--EDIT|pq|1149855179-->
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
Froschpopo
 2006-06-09 16:30
#67087 #67087
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ok dann weiss ich jetzt bescheid... bevor du wieder bockig wirst.
Aber was mich noch interessiert: wie macht ihr das in euren scripts? Ich meine, es ist ja auch ok wenn man dieses warning ignoriert... funzt ja trotzdem. oder seid ihr da so pingelig und unterscheidet streng?
GwenDragon
 2006-06-09 16:36
#67088 #67088
User since
2005-01-17
14538 Artikel
Admin1
[Homepage]
user image
Ich ignoriere keine warnings.

Wenn warnings auftreten, schreib ich den Code so um, dass er solche Probleme abfängt.
Du musst entscheiden und prüfen, was gültige Werte in deinem Code sind.
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Froschpopo
 2006-06-09 16:39
#67089 #67089
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
O.k. dann hab ich mal wieder ne lange Nacht vor mir.... is doch echt zum kotzen.
<< |< 1 2 3 4 5 6 >| >> 52 Einträge, 6 Seiten



View all threads created 2006-06-08 02:06.