Aqua: Perl ist falsch aber es kommt KEIN Fehler

Hallo!

Gerade bin ich dabei, ein bißchen in Perl herum zu experimentieren.
Da beschaeftigte ich mich auch etwas mit Referenzen,
und da entstand folgendes Script:

===========================================

#!/usr/bin/perl -w

use strict;

print "Content-type: text/html\n\n";

my @foo=qw(a b c d e f);
my $bar=@foo;

$foo[3]="TEST";
print $foo[3]." - ".$bar->[3]

===========================================

Wenn man genau schaut, stellt man fest,
daß da _gaaanz_ eindeutig ein Fehler in der letzten Zeile ist.
und zwar bei
print $foo[3]." - ".$bar->[3]
fehlt das semicolon also der ;

Dennoch führt Perl es OHNE jegliche Fehlermeldungen aus.
warnings ist an (das -w in Interpretor) und das Pragma strict
verwende ich ebenfalls.

Egal ob ich es in der Shell oder im Browser ausführe,
es kommt KEIN error!!

Ich verwende Perl, v5.8.0 built for i386-linux-thread-multi.

Meine Frage:

Warum kommen da keine Fehler??!?!?!

Danke!
Aqua

  1. Hi,

    Warum kommen da keine Fehler??!?!?!

    Wenn ich mich nicht ganz arg irre, liegt das daran, dass da dein Script zuende ist. Wenn du hinter dein Script noch etwas schreibt, z.b. "print "\nfertig\n";" gibt es einen Fehler.
    In allen Blöcken kannst du, solange es nur in der letzten, bzw einzigen Zeile ist, das Semikolon weglassen, da es sinnlos ist. Das kann man auch z.B. daran sehen, das "if ($foo==$bar){do_foobar()}" und ähnliches richtig ist.

    Grüße Andres Freund

    --
    ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
  2. Guten Morgen,

    Wenn man genau schaut, stellt man fest,
    daß da _gaaanz_ eindeutig ein Fehler in der letzten Zeile ist.
    und zwar bei
    print $foo[3]." - ".$bar->[3]
    fehlt das semicolon also der ;

    Da die print-Anweisung die letzte in deinem Script sein dürfte, ist das afaik kein Fehler sondern optional (siehe perlfaq7, http://www.perldoc.com/perl5.8.0/pod/perlfaq7.html, dort Frage 3). Erscheint mir auch logisch, denn du schließt eine Anweisung mit dem ";" ab und leitest damit die nächste Anweisung ein. Da am Ende des Scripts sowieso Schluss ist, dürfte das Semikolon wie gesagt optional sein.

    mfg Torsten

    --
    Opinions are like assholes: everybody has one.
    ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
  3. print $foo[3]." - ".$bar->[3]

    Wenn man genau schaut, stellt man fest,
    daß da _gaaanz_ eindeutig ein Fehler in der letzten Zeile ist.
    und zwar bei
    print $foo[3]." - ".$bar->[3]
    fehlt das semicolon also der ;

    Nein. Das Semikolon schliesst nicht ab, sondern es *trennt*.

  4. Hallo =)
    Danke euch für die Hilfe!
    LG
    Aqua