我認爲這可能使用一個例子來最好問:如何在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
當我傾倒/tmp/sub.store
我看到:
$VAR1 = sub {
package Storable;
use warnings;
use strict 'refs';
my($y) = @_;
return $x + $y;
}
但$x
在這個子從未定義。我期望sub_generator
生成的子將用$x
代替其實際值。我應該如何解決這個問題?
請注意此問題與此one有關。
也許現在是時候回過頭來考慮是否序列化subs是一個好主意?在我的職業生涯中,我很少遇到需要做這樣的事情。 – Ether 2010-10-02 17:08:29
@其他我通過建議使用一個對象。出於某種原因,我傾向於避免使用Perl中的對象,直到你們將我介紹給Moose,這使得每件事都變得更加美好。 – 2010-10-03 13:01:17