Multithreading 为线程设计的哈希,以YAML格式转储

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

正在尝试在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({});

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: {}