Lo primero que podemos hacer es definir de antemano una función con un prototipo ";$", que quiere decir que la función recibe como argumento un escalar, opcionalmente. Osea, que se puede ejecutar "boo" o "boo($persona)".
#!/usr/bin/perlLuego, para ejecutarlo, solo tenemos que llamar a la función, sin siquiera paréntesis:
use strict;
use warnings;
sub boo(;$) {
print "Boo!";
}
#!/usr/bin/perl
use strict;
use warnings;
sub boo(;$) {
print "Boo!";
}
boo;Y eso nos imprime por pantalla "Boo!", como se espera. Hagamos una mejora: si uno le da un argumento a "boo", entonces que lo guarde; si no, que lo devuelva.
#!/usr/bin/perlAhora tiene un poco más de pinta de variable sin sigil. Pero ¡pidamos más! ¿Podremos asignar un valor a "boo" con un igual, como en (casi) cualquier lenguaje de programación? Por supuesto! Si le ponemos el atributo "lvalue" a boo.
use strict;
use warnings;
use 5.010;
sub boo(;$) {
state $susto = "Default Boo";
if ( $_[0] ) { $susto = $_[0]; }
return $susto;
}
say "En la oscuridad, llego a la esquina y... " . boo . "!";
boo "Cuidado";
say "En la oscuridad, llego a la esquina y... " . boo . "!";
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
sub boo(;$) :lvalue {
state $susto = "Default Boo";
if ( $_[0] ) { $susto = $_[0]; }
return $susto;
}
say "En la oscuridad, llego a la esquina y... " . boo . "!";
boo "Cuidado";
say "En la oscuridad, llego a la esquina y... " . boo . "!";
boo = "AAAAAAAAAAH!";
say "En la oscuridad, llego a la esquina y... " . boo . "!";
Sigo con un intento, por ahora fallido, de hacer esto aún más general, en la segunda parte.
-- Diego.
No hay comentarios:
Publicar un comentario