Rit*_*ose 7 perl hash functional-programming generative-programming
我有一个Perl程序,它从输入文件生成解析规则作为subs.sub是匿名定义的一个放入哈希.现在,我想导出该哈希值,包含所有子目录,然后再次加载它们以与其他程序一起使用.
我该怎么做呢?有没有办法提取每个子代码,或者我可以复制散列存在的内存块,然后在我稍后再次加载时将其转换为哈希值?
提前致谢.
来自可存储文档的“代码参考”部分(特别强调):
\n\n\n\n\n从 Storable 版本 2.05 开始,可以在
\nB::Deparse. 要启用此功能,请设置$Storable::Deparse为真值。要启用反序列化,$Storable::Eval应设置为真值。请注意,反序列化是通过 完成的eval,如果可存储文件包含恶意数据,则这是危险的。
在下面的演示中,子进程创建匿名子进程的哈希值。然后父\xe2\x80\x94在一个完全独立的进程和地址空间中,因此它看不到\xe2\x80\x94以与从磁盘上的文件相同的方式读取%dispatch输出。freeze
#! /usr/bin/perl\n\nuse warnings;\nuse strict;\n\nuse Storable qw/ freeze thaw /;\n\nmy $pid = open my $fh, "-|";\ndie "$0: fork: $!" unless defined $pid;\n\nif ($pid == 0) {\n # child process\n my %dispatch = (\n foo => sub { print "Yo!\\n" },\n bar => sub { print "Hi!\\n" },\n baz => sub { print "Holla!\\n" },\n );\n\n local $Storable::Deparse = 1 || $Storable::Deparse;\n binmode STDOUT, ":bytes";\n print freeze \\%dispatch;\n exit 0;\n}\nelse {\n # parent process\n local $/;\n binmode $fh, ":bytes";\n my $frozen = <$fh>;\n\n local $Storable::Eval = 1 || $Storable::Eval;\n my $d = thaw $frozen;\n $d->{$_}() for keys %$d;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n输出:
\n\n嗨!\nHolla!\n哟!\n