Perl使用Hash::Merge合并YML文件写入时出现引用数据如何解决?
不需要为Hash::Merge设置额外的自定义参数,你遇到的问题是写入文件的逻辑错误导致的。
问题原因
File::Slurp的write_file方法会直接将传入的变量转为字符串写入,你传入解引用后的%{$res}时,哈希值中嵌套的数组、哈希引用会直接被序列化为内存地址字符串,也就是你看到的ARRAY(0x1013320)这类内容。
之前用Dumper能正常查看结构,是因为Dumper会递归解析引用结构,原生的字符串序列化不会做这个处理。
修复方案
你已经引入了YAML模块,只需要先调用YAML::Dump方法将合并后的引用结构转为合法的YAML格式字符串,再写入文件即可。
将原来的write_file相关代码替换为以下内容:
my $res = merge($yml1, $yml2); # 先转成标准YAML格式再写入文件 write_file("final.yml", { binmode => ':raw' }, YAML::Dump($res));
内容的提问来源于stack exchange,提问作者Ramse
相关产品推荐
相关产品推荐

