[bcn-pm] programilla Perl, inutil pero divertido
Jordi Delgado
jdelgado a lsi.upc.edu
dic jul 15 05:03:38 PDT 2009
Hola,
Gracias Jose Luis, pero lo que tu has hecho no es exactamente lo
que yo queria hacer, que es conseguir una funcion que se auto-modificara
en tiempo de ejecucion (aunque si que es bizarro, si).
Sin embargo, gracias al deparse que utilizas puedo hacer lo que queria:
----------------------------------------------------
use B::Deparse;
sub costly {
return $_[0] + 1;
}
sub memoize_funny {
my $param = shift;
if (1) {
my $result = &costly($param);
print "Computing costly... $result\n";
my $deparse= B::Deparse->new();
$_ = $deparse->coderef2text(\&memoize_funny);
s/(.*)do/$1if (1)/; # This is because the initial 'if (1)'
# is deparsed as a 'do '
s/(.*)if /$1if (\$param == $param) { print "cheap: $result\\n" } elsif /;
eval "sub memoize_funny $_";
}
};
while (<STDIN>) { ## exit with ctrl + d
chomp;
&memoize_funny($_);
}
## To see how the program has been modified...
my $deparse= B::Deparse->new();
$_ = $deparse->coderef2text(\&memoize_funny);
print;
----------------------------------------------------
Bueno, pues eso... que casi es la hora de comer, ahora no te pondras a
hacer nada serio y...
Salud!
Jordi
Més informació sobre la llista de correu Barcelona-pm