我有Perl“配置文件”,其中包含如下数据结构:
'xyz' => {
'solaris' => [
"value1",
"valueN",
],
'linux' => [
"valueX",
"valueN",
],
},
我叫他们做一个简单的事情:
%config = do '/path/to/file.conf';
现在,我想像这样“生成”配置文件(直接构造数据结构“结构”并将其打印在配置文件中)。 我可以按常规方式填充(数组或其他任何东西)哈希值的哈希,但是之后如何将其转储到配置文件中?
是否有一种干净便捷的方法? 而不需要做诸如:p的肮脏事情
print $FH "'xyz' => {\n";
print $FH " 'solaris' => [\n";
等
我“猜” Data :: Dumper可以做到这一点。
谢谢!
答案 0 :(得分:3)
您要
$Data::Dumper::Terse = 1;
$ Data :: Dumper :: Terse或$ OBJ-> Terse([NEWVAL])
设置后,Data :: Dumper将发出单个非自我引用的值作为原子/术语,而不是语句。这意味着将在可能的情况下避免使用
$VAR
n个名称,但是建议eval
不一定总是可以解析此类输出。
更新(以解决下面的评论):
Data :: Dumper将添加正确的标点符号,以便您准确获取所提供的内容。如果给它一个哈希引用,那么您将得到一个以大括号开头和结尾的字符串。
$ perl -MData::Dumper -E'$Data::Dumper::Terse=1; say Dumper { foo => { bar => "baz" }}'
{
'foo' => {
'bar' => 'baz'
}
}
如果给它一个数组引用,那么您将得到一个以方括号开头和结尾的字符串。
$ perl -MData::Dumper -E'$Data::Dumper::Terse=1; say Dumper [ foo => { bar => "baz" }]'
[
'foo',
{
'bar' => 'baz'
}
]
如果出于某种原因,您都不想要这些,请给它一个值列表。
$ perl -MData::Dumper -E'$Data::Dumper::Terse=1; say Dumper ( foo => { bar => "baz" })'
'foo'
{
'bar' => 'baz'
}
如果您有一个哈希引用,并且您不希望周围的花括号(说实话,这似乎是一个奇怪的要求),请先取消引用该引用,然后再将其传递给Dumper()
。这样会将哈希引用转换为哈希,然后通过将哈希传递给函数将其“展开”为列表。
$ perl -MData::Dumper -E'$Data::Dumper::Terse=1; $ref = { foo => { bar => "baz" }}; say Dumper %$ref'
'foo'
{
'bar' => 'baz'
}