将Perl中的匿名子写入文件以供以后使用

Rit*_*ose 7 perl hash functional-programming generative-programming

我有一个Perl程序,它从输入文件生成解析规则作为subs.sub是匿名定义的一个放入哈希.现在,我想导出该哈希值,包含所有子目录,然后再次加载它们以与其他程序一起使用.

我该怎么做呢?有没有办法提取每个子代码,或者我可以复制散列存在的内存块,然后在我稍后再次加载时将其转换为哈希值?

提前致谢.

Gre*_*con 2

来自可存储文档的“代码参考”部分(特别强调):

\n\n
\n

从 Storable 版本 2.05 开始,可以在B::Deparse. 要启用此功能,请设置$Storable::Deparse为真值。要启用反序列化,$Storable::Eval应设置为真值。请注意,反序列化是通过 完成的eval,如果可存储文件包含恶意数据,则这是危险的。

\n
\n\n

在下面的演示中,子进程创建匿名子进程的哈希值。然后父\xe2\x80\x94在一个完全独立的进程和地址空间中,因此它看不到\xe2\x80\x94以与从磁盘上的文件相同的方式读取%dispatch输出。freeze

\n\n
#! /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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
嗨!\nHolla!\n哟!
\n