Thread prototypes (try/catch) (3 answers)
Opened by betterworld at 2003-09-24 23:39

coax
 2003-09-26 07:37
#55991 #55991
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=betterworld,24.09.2003, 21:39]Ich finde das aber etwas komisch insofern, als dass da im Prototyp &@ steht, obwohl doch ueberhaupt kein Array als zweites Argument uebergeben wird.[/quote]
Das @-Zeichen in der Prototypen-Definition steht auch nicht fuer ein Array sondern fuer eine Liste.
Eine Subroutine mit Codereferenz- und Array-Prototyp wuerde so aussehen:
Code: (dl )
1
2
3
sub (&\@) {
# ....
}


Hier mal ein Versuch einer Definition
Code (perl): (dl )
sub catch (&) { $_[0] }


Erstes Argument == Rueckgabewert, d.h. die anonyme Subroutine die catch beim Aufruf erhaelt
Code: (dl )
{ /phooey/ and print "unphooey\n"; }

wird auch gleich wieder von catch zurueck gegeben.
Code (perl): (dl )
1
2
3
4
5
6
7
8
sub try (&@) {
     my($try,$catch) = @_;
     eval { &$try };
     if ($@) {
        local $_ = $@;
        &$catch;
     }
 }

try nimmt auch als erstes Argument eine anonyme Subroutine entgegen gefolgt von einer Liste.
Die anonymous Sub ist:
Code (perl): (dl )
{ die "phooey"; }

Die Liste die try entgegen nimmt enthaelt nur den Rueckgabewert von catch (Codereferenz bzw. anonymous Subroutine).
,,Das perlt aber heute wieder...'' -- Dittsche

View full thread prototypes (try/catch)