Я думаю, это лучше всего задать, используя пример:
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
Когда я сбрасываю /tmp/sub.store
Я вижу:
$VAR1 = sub {
package Storable;
use warnings;
use strict 'refs';
my($y) = @_;
return $x + $y;
}
Но $x
никогда не определяется в этомк югу.Я ожидаю, что сгенерированный sub_generator
саб будет заменен на $x
его фактическим значением при генерации.Как мне решить эту проблему?
Обратите внимание, что этот вопрос относится к этому one .