creo que esto se le puede pedir con un ejemplo:¿Cómo puedo serializar un cierre en Perl?
use strict;
use warnings;
use 5.010;
use Storable qw(nstore retrieve);
local $Storable::Deparse = 1;
local $Storable::Eval = 1;
sub sub_generator {
my ($x) = @_;
return sub {
my ($y) = @_;
return $x + $y;
};
}
my $sub = sub_generator(1000);
say $sub->(1); # gives 1001
nstore($sub, "/tmp/sub.store");
$sub = retrieve("/tmp/sub.store");
say $sub->(1); # gives 1
Cuando yo tiro /tmp/sub.store
veo:
$VAR1 = sub {
package Storable;
use warnings;
use strict 'refs';
my($y) = @_;
return $x + $y;
}
Pero $x
Nunca se define en esta sub. Esperaría que el submarino generado por sub_generator
tenga $x
reemplazado por su valor real en la generación. ¿Cómo debería resolver esto?
Tenga en cuenta que esta pregunta se relaciona con esto one.
Tal vez es hora de dar un paso atrás y considerar si serializar subs es una buena idea? Raramente he encontrado la necesidad de hacer algo así en mi carrera. – Ether
@Ether adopté la sugerencia de usar un objeto en su lugar. Por alguna razón, estaba tratando de evitar objetos en Perl, hasta que ustedes me presentaron mi Moose, lo que hace que todo sea mucho mejor. –