Thread Klammer-Fehler in if-Abfrage/Dereferenzierung -- Warum keine Fehlermeldung? (4 answers)
Opened by FoolAck at 2008-06-07 15:40

FoolAck
 2008-06-07 15:40
#110853 #110853
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
use strict; use warnings;

sub foo {}
my @field = ([], [], []);

if (${field [0][0] and not foo())} {print "ok\n"}
else {print "lolwut? o0\n"}

Kompiliert ohne Fehler und perl -c sagt auch "Syntax ok".
Der subtile Fehler ist die fehlende geschwiffene Klammer bei der Dereferenzierung. (${field [0][0] <- Da müsste sie hin, stattdessen kommt sie später. Nämlich nach dem Ende der if-Bedingung)
Dadurch sind die Rundklammern im Konditional ja eigentlich unbalanciert (oder zumindest innerhalb der curly-Braces). Ich verstehs nicht, hier meckert perl auch (wie zu erwarten) rum:
Code: (dl )
1
2
3
4
5
6
use strict; use warnings;

sub foo {}
my @field = ([], [], []);

print ${field [0][0] and not foo())}
STDERR
syntax error at - line 5, near "))"
Execution of - aborted due to compilation errors.

Warum dann nicht beim ersten Beispiel? 0o (Ich steh auf'm Schlauch. Hab den Fehler auch nur durch Zufall gefunden. (Wie sowas passieren kann ist wieder ne andere Frage, aber offensichtlich kann es passieren.))

Perl-Version ist 5.8.8, OS ubuntu gutsy (obwohl ich mir nicht vorstellen kann, dass das OS von Relevanz sein sollte).
Code: (dl )
1
2
3
4
5
6
$ perl --version

This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
[...]
$ uname -a
Linux localhost 2.6.22-14-rt #1 SMP PREEMPT RT Tue Feb 12 09:57:10 UTC 2008 i686 GNU/Linux

View full thread Klammer-Fehler in if-Abfrage/Dereferenzierung -- Warum keine Fehlermeldung?