rjz*_*zii 2 perl serialization hashmap
正如标题所说,在Perl中,如何保存包含子例程引用列表的哈希?例如,我有以下哈希,其中包含对其他库中包含的子例程的引用:
my %testMap = (
helloTest => \&runHello,
goodbyeTest => \&runGoodbye,
);
Run Code Online (Sandbox Code Playgroud)
当我尝试在以下问题中使用Data :: Dumper时:
my($out) = new FileHandle ">$fileName";
my $serialized => Data::Dumper->Dump([\%testMap], [$HASH_REFERENCE]);
print $out $serialized;
close $out;
Run Code Online (Sandbox Code Playgroud)
我最终得到一个如下所示的文件:
$testMap = {
'goodbyeTest' => sub { "DUMMY" },
'helloTest' => sub { "DUMMY" }
};
Run Code Online (Sandbox Code Playgroud)
当我希望输出看起来像原始列表中显示的内容时,有没有办法做到这一点?
到目前为止,Data :: Dumper和Storable的一些实验一无所获,我怀疑它是由于引用的实际代码不可用于正在运行的代码.
Storable 从版本2.05开始,已能够序列化coderef.
use strict;
use warnings;
use Storable;
use Data::Dump 'dump';
{
no warnings; # Suppress 'used only once' warning
$Storable::Deparse = 1; # Needs to be set to true as per docs
$Storable::Eval = 1; # Same as above
}
sub hello_world { print "Hello world!\n" }
my %hash = (
helloTest => \&hello_world,
byeTest => sub { print "Goodbye!\n" },
);
store \%hash, 'file'; # Could use freeze/thaw for
my $cloned = retrieve( 'file' ); # in-memory serialization
$cloned->{helloTest}(); # Prints 'Hello world!'
Run Code Online (Sandbox Code Playgroud)