Thread Use of uninitialized value (12 answers)
Opened by ~Br4inP4in~ at 2008-09-13 15:11

pq
 2008-09-13 16:07
#114596 #114596
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
leute, probiert das doch bitte einmal aus, bevor ihr postet.
1. ein 'or' hat zu geringe präzedenz, als dass man es hier verwenden könnte.
beweis:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
perl -wle'
my $order;
print "undef" if ($order or 0 eq "name");
$order = "";
print "empty string" if ($order or 0 eq "name");
$order = "name";
print "name" if ($order or 0 eq "name");
$order = "not name";
print "not name" if ($order or 0 eq "name");'
name
not name

es wird zuerst geprüft, ob $order true ist, und dann, ob 0 gleich "name" ist.
das *kann* nicht funktionieren. wie man sieht.

also: *wenn* dann || verwenden.

2. wenn man nun $var || '' oder $var || 0 benutzt, muss man ganz doll aufpassen,
es mag hier die schreibarbeit verkürzen, aber ich hab schon mal eine weile
gesucht, um einen bug zu finden, der durch so etwas entstanden ist. überall, wo
man $var || '' schreibt, wird die 0 automatisch zu '', und überall, wo man
$var || 0 schreibt, wird '' automatisch zu 0. das ist *hier* in diesem fall kein
problem, aber sobald das progrämmchen ein bisschen grösser wird, kann
es das werden. also wenn man soetwas benutzt, immer nachdenken, ob es
einen fall gibt, in dem die 0 oder der leere string auch ok wären.

3. @struppi: wieso soll $zahl eq "string" eine warnung ergeben? nur ein numerischer
vergleich erzeugt bei soetwas eine warnung.
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

View full thread Use of uninitialized value