[bcn-pm] Primer pas...
Xavier Noria
fxn at hashref.com
Fri Dec 12 11:42:58 CST 2003
El 12/12/2003, a las 17:45, Francesc Guasch escribió:
> Pots passar com a paràmetre una referència a una funció.
> Si vols, pots ser anonima:
>
> sub dobla { # funció que dobla un nº
> return 2*shift;
> }
>
> sub bar { # funció que crida a una funció que ens passen com paràmetre
> my ($func,$var) = @_;
> return &$func($var);
> }
>
> print bar(\&dobla,3),"\n"; # referència a una funció
>
> print bar( sub { return 3*shift } , 3) ,"\n"; # ref. a una funció
> anònima
A mes a mes, si vols imitar la sintaxi de map, es a dir, map BLOCK
LIST, pots aconseguir-ho usant prototipus. Es tracta de declarar que el
primer parametre es una referencia a una subrutina, i fer anar que Perl
et perdona el "sub" del constructor de coderefs sub { ... }.
Els prototipus a Perl no son el mateix que els prototipus en un
llenguatge estaticament tipat, estan documentats a la seccio
"Prototypes" de perlsub. Es un dels trucs que es poden emprar per a fer
com si extenguessis el llenguatge. Per exemple definint les dues
subrutines
sub try (&@) {
my ($try,$catch) = @_;
eval { &$try };
if ($@) {
local $_ = $@;
&$catch;
}
}
sub catch (&) { $_[0] }
pots emprar aquesta sintaxi (i.e., el seguent codi compila):
try {
die "phooey";
} catch {
/phooey/ and print "unphooey\n";
};
El modul Error.pm esta implementat aixi.
Aquest article situa les diferencies entre el concepte mes estandard de
prototipus i el de Perl:
Far More Than Everything You've Ever Wanted to Know about
Prototypes in Perl
http://www.perl.com/language/misc/fmproto.html
-- fxn
More information about the Barcelona-pm
mailing list