fetchrow_arrayref Rückgabewert
fetchrow_arrayref Rückgabewert
am 06.04.2006 19:06:45 von Anton Berg
Hallo,
in der Hilfe zu fetchrow_arrayref steht, dass wenn keine weiteren
Datensätze mehr vorhanden sind, der Rückgabewert undef ist. Wenn ich
nun in einer while-Schleife also etwas der folgenden Art schreibe:
while($Handle->fetchrow_arrayref) {
# mach was
}
dann müsste undef ja als false ausgewertet werden. Ist das korrekt?
Wird undef immer als false ausgewertet, oder muss ich um sicher zu sein
folgendes schreiben:
while($Handle->fetchrow_arrayref !=3D undef) {
# mach was
}
Grüsse und danke,
Anton
Re: fetchrow_arrayref Rückgabewert
am 06.04.2006 19:38:16 von Dominik Seelow
Anton Berg wrote:
> Hallo,
>
> in der Hilfe zu fetchrow_arrayref steht, dass wenn keine weiteren
> Datensätze mehr vorhanden sind, der Rückgabewert undef ist. Wenn ich
> nun in einer while-Schleife also etwas der folgenden Art schreibe:
> while($Handle->fetchrow_arrayref) {
> # mach was
> }
>
> dann müsste undef ja als false ausgewertet werden. Ist das korrekt?
> Wird undef immer als false ausgewertet, oder muss ich um sicher zu sein
> folgendes schreiben:
> while($Handle->fetchrow_arrayref != undef) {
> # mach was
> }
foreach my $value (1,0,undef){
print $value,"\t",$value?"true":"false","\n";
}
HTH,
Dominik
Re: fetchrow_arrayref Rückgabewert
am 07.04.2006 08:32:36 von Lukas Mai
Anton Berg schrob:
> [...]
> dann müsste undef ja als false ausgewertet werden. Ist das korrekt?
Ja. undef, 0, "" und "0" sind false.
> Wird undef immer als false ausgewertet, oder muss ich um sicher zu sein
> folgendes schreiben:
> while($Handle->fetchrow_arrayref != undef) {
Das wäre falsch. != vergleicht Zahlen, also würde undef zu 0
konvertiert, was eine Warnung auslöst; und der Vergleich wäre für alle
Werte, deren Zahlenwert 0 ist, wahr. Probier mal
perl -wle 'print "$_: ", ($_ != undef) ? "!= undef" : "== undef" for 1, "hallo", [], undef'
HTH, Lukas
Re: fetchrow_arrayref Rückgabewert
am 07.04.2006 09:45:44 von Frank Seitz
Anton Berg wrote:
> in der Hilfe zu fetchrow_arrayref steht, dass wenn keine weiteren
> Datensätze mehr vorhanden sind, der Rückgabewert undef ist.
Das ist nur die halbe Realität. Es kann auch ein Fehler
die Ursache sein. Darauf solltest Du prüfen, falls
Du keine Exceptions ("RaiseError") aktiviert hast.
> dann müsste undef ja als false ausgewertet werden. Ist das korrekt?
Wie meine Vorredner schon sagten: ja.
Mit dieser Frage hast Du Dich als clueless Newbie geoutet :)
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: fetchrow_arrayref Rückgabewert
am 07.04.2006 10:02:02 von Frank Seitz
Lukas Mai wrote:
> Das wäre falsch. != vergleicht Zahlen, also würde undef zu 0
> konvertiert, was eine Warnung auslöst; und der Vergleich wäre für alle
> Werte, deren Zahlenwert 0 ist, wahr. Probier mal
>
> perl -wle 'print "$_: ", ($_ != undef) ? "!= undef" : "== undef" for 1, "hallo", [], undef'
Ich bekomme:
Use of uninitialized value in numeric ne (!=) at -e line 1.
1: != undef
Use of uninitialized value in numeric ne (!=) at -e line 1.
Argument "hallo" isn't numeric in numeric ne (!=) at -e line 1.
hallo: == undef
Use of uninitialized value in numeric ne (!=) at -e line 1.
ARRAY(0x811a3c8): != undef
Use of uninitialized value in concatenation (.) or string at -e line 1.
Use of uninitialized value in numeric ne (!=) at -e line 1.
Use of uninitialized value in numeric ne (!=) at -e line 1.
: == undef
Was will uns der Autor mit diesem Resultat sagen?
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: fetchrow_arrayref Rückgabewert
am 08.04.2006 20:38:38 von Lukas Mai
Frank Seitz schrob:
> Lukas Mai wrote:
>
>> Das wäre falsch. != vergleicht Zahlen, also würde undef zu 0
>> konvertiert, was eine Warnung auslöst; und der Vergleich wäre für alle
>> Werte, deren Zahlenwert 0 ist, wahr. Probier mal
>>
>> perl -wle 'print "$_: ", ($_ != undef) ? "!= undef" : "== undef" for 1, "hallo", [], undef'
>
> Ich bekomme:
>
> Use of uninitialized value in numeric ne (!=) at -e line 1.
> 1: != undef
1 != undef (plus Warnung)
> Use of uninitialized value in numeric ne (!=) at -e line 1.
> Argument "hallo" isn't numeric in numeric ne (!=) at -e line 1.
> hallo: == undef
"hallo" == undef (plus zwei Warnungen)
> Use of uninitialized value in numeric ne (!=) at -e line 1.
> ARRAY(0x811a3c8): != undef
[] != undef (plus Warnung)
> Use of uninitialized value in concatenation (.) or string at -e line 1.
> Use of uninitialized value in numeric ne (!=) at -e line 1.
> Use of uninitialized value in numeric ne (!=) at -e line 1.
> : == undef
undef == undef (plus zwei Warnungen (Bonus-Warnung wegen "$_: "))
> Was will uns der Autor mit diesem Resultat sagen?
Dass == kein generischer Gleichheitstest ist, sondern für Zahlen gedacht
ist. Und obwohl undef == undef wahr ist, gilt das auch für "string" ==
undef. Das ist alles.
HTH, Lukas
Re: fetchrow_arrayref Rückgabewert
am 08.04.2006 21:37:46 von Frank Seitz
Lukas Mai wrote:
> Frank Seitz schrob:
>>
>>Was will uns der Autor mit diesem Resultat sagen?
>
> Dass == kein generischer Gleichheitstest ist, sondern für Zahlen gedacht
> ist. Und obwohl undef == undef wahr ist, gilt das auch für "string" ==
> undef. Das ist alles.
Ich denke, alle Operatoren außer defined sind auf undef nicht anwendbar.
Streng genommen ist das Ergebnis undefiniert, aber Perl versucht
das Beste draus zu machen und liefert trotzdem ein
definiertes(?) Resultat. Die Warnungen zeigen, dass eine
Programmierung, die darauf aufbaut, aber eigentlich unerwünscht ist.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: fetchrow_arrayref Rückgabewert
am 09.04.2006 10:32:56 von Ch Lamprecht
Frank Seitz schrieb:
>
> Ich denke, alle Operatoren außer defined sind auf undef nicht anwendbar.
> Streng genommen ist das Ergebnis undefiniert, aber Perl versucht
> das Beste draus zu machen
Hallo,
undef ist doch ein gültiger bool:
perldoc perlsyn:
---The number 0, the strings '0' and '', the empty list (), and undef
are all false in a boolean context.---
Also sind mindestens die boolschen Operatoren anwendbar und das Ergebnis
ist wohldefiniert.
Christoph
--
perl -e "print scalar reverse q/ed.enilno@ergn.l.hc/"
Re: fetchrow_arrayref Rückgabewert
am 10.04.2006 09:34:28 von Frank Seitz
Ch Lamprecht wrote:
> Frank Seitz schrieb:
>>
>>Ich denke, alle Operatoren außer defined sind auf undef nicht anwendbar.
>>Streng genommen ist das Ergebnis undefiniert, aber Perl versucht
>>das Beste draus zu machen
>
> undef ist doch ein gültiger bool:
>
> perldoc perlsyn:
> ---The number 0, the strings '0' and '', the empty list (), and undef
> are all false in a boolean context.---
>
> Also sind mindestens die boolschen Operatoren anwendbar und das Ergebnis
> ist wohldefiniert.
Stimmt. Ich hätte wohl besser schreiben sollen: "Alle
Vergleichsoperatoren sind ...".
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel