do und eval Blöcke
am 20.03.2007 10:22:08 von Ferry Bolhar
Hallo,
im Zuge der Diskussion über Frank Küster's "Odd number
of elements" Problem ist bei uns eine Frage aufgetaucht: worin
besteht der syntaktische Unterschied zwischen einem do- und
einem eval-Block? Also:
my $retval = do {...}; und
my $retval = eval {...};
Ich meine jetzt nicht zur Laufzeit (es ist schon klar, dass ein
"die" in einem eval-Block ein anderes Ergebnis haben wird als
in einem do-Block), sondern aus der Sicht der Parsers bzw.
des Kompilierens. Sind beide Konstrukte syntaktisch bzw.
semantisch ident? Falls nicht, worin bestehen Unterschiede?
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: do und eval Blöcke
am 20.03.2007 10:45:14 von Frank Seitz
Ferry Bolhar wrote:
> im Zuge der Diskussion über Frank Küster's "Odd number
> of elements" Problem ist bei uns eine Frage aufgetaucht: worin
> besteht der syntaktische Unterschied zwischen einem do- und
> einem eval-Block? Also:
>
> my $retval = do {...}; und
> my $retval = eval {...};
>
> Ich meine jetzt nicht zur Laufzeit (es ist schon klar, dass ein
> "die" in einem eval-Block ein anderes Ergebnis haben wird als
> in einem do-Block), sondern aus der Sicht der Parsers bzw.
> des Kompilierens. Sind beide Konstrukte syntaktisch bzw.
> semantisch ident? Falls nicht, worin bestehen Unterschiede?
Semantisch:
do{} hat eine Sonderrolle im Zusammenhang mit Loop-Modifiern (siehe Doku).
eval{} fängt - wie Du selbst sagst - Exceptions und setzt $@.
Syntaktisch ist es beide Male ein stinknormaler BLOCK,
behaupte ich mal.
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