Multithreading 为线程设计的哈希,以YAML格式转储
正在尝试在YAML文件中转储包含共享引用的嵌套哈希映射。Perl代码在这里。散列实际上是线程友好的Multithreading 为线程设计的哈希,以YAML格式转储,multithreading,perl,Multithreading,Perl,正在尝试在YAML文件中转储包含共享引用的嵌套哈希映射。Perl代码在这里。散列实际上是线程友好的 use v5.18; use YAML::XS; use threads; use threads::shared; use Data::Dumper; my $href1 = shared_clone({ anotherRef => shared_clone({}) }); $href1->{anotherRef}{test} = &share({}); pr
use v5.18;
use YAML::XS;
use threads;
use threads::shared;
use Data::Dumper;
my $href1 = shared_clone({
anotherRef => shared_clone({})
});
$href1->{anotherRef}{test} = &share({});
print Dumper $href1;
my $path = "./test.yaml";
open TAG_YAML, '>', $path;
print TAG_YAML Dump($href1);
close TAG_YAML;
1;
最后,我尝试转储这个流,它显示了下面提到的引用
% ./ref-of-refs.pl ; cat test.yaml
---
anotherRef: HASH(0x21897a0)
在test.YAML文件中是否有将完整哈希转储为YAML格式的选项 我的猜测是,使用XS的魔法会混淆
YAML::XS::Dump()
(因为它还使用XS遍历hashref)。我建议您尝试使用纯Perl模块:
输出:
---
anotherRef:
test: {}
根据这一点,共享变量是使用某种魔法实现的。我的猜测是,由于这个神奇的
YAML::XS::Dump()
无法将其识别为散列引用,因此返回到输出字符串化散列(0x21897a0)
而不是真正的散列..添加了我做了一个简单的修改,现在在快速查看源代码时修复了这个问题。确实显示缺少对SvGETMAGIC的调用。
。补丁欢迎:)您也可以使用或。YAML.pm又老又笨重。
---
anotherRef:
test: {}