我有简单的perl脚本,如下所示:
#!/usr/bin/perl
use strict;
use Data::Dumper;
my %x;
$x{"a"}="b";
$x{"b"}={'c'=>3,'d'=>4};
$x{"c"}={'e'=>{'f'=>5,'g'=>6},'h'=>{'i'=>7,'j'=>8}};
print Dumper(%x);
输出如下:
> ./temp.pl
$VAR1 = 'c';
$VAR2 = {
'e' => {
'g' => 6,
'f' => 5
},
'h' => {
'j' => 8,
'i' => 7
}
};
$VAR3 = 'a';
$VAR4 = 'b';
$VAR5 = 'b';
$VAR6 = {
'c' => 3,
'd' => 4
};
,
但是我想要的输出是不同的。所以我尝试了下面的代码:
#!/usr/bin/perl
use strict;
use Data::Dumper;
my %x;
$x{"a"}="b";
$x{"b"}={'c'=>3,'d'=>4};
$x{"c"}={'e'=>{'f'=>5,'g'=>6},'h'=>{'i'=>7,'j'=>8}};
foreach (keys %x )
{
if(ref($x{$_}) eq "HASH")
{
print Dumper(\%{$x{$_}}).",";
}
else
{
print $x{$_}.",\n"
}
}
但这给了我一个输出如下:
> ./temp.pl
$VAR1 = {
'e' => {
'g' => 6,
'f' => 5
},
'h' => {
'j' => 8,
'i' => 7
}
};
,b,
$VAR1 = {
'c' => 3,
'd' => 4
};
但我需要的是如下所示。我不需要VAR1等在输出中也需要=>
。我只需要键和值,它们之间有空格
c {
'e' {
'g' 6,
'f' 5
},
'h' {
'j' 8,
'i' 7
}
},
a b,
b {
'c' 3,
'd' 4
}
所有perl专家都在那里,任何人都可以给我正确的方向来打印我需要的输出!
我从perleone的建议中得到了我所需要的东西。 但我也试过以下问题:
my %y={"one"=>404,"two"=>\%x};
现在,如果我这样做
print Dumper(\%y);
它给了我一个输出:
> ./temp.pl
{
'HASH(0x807f08c)' undef
}
我在哪里错了?
答案 0 :(得分:6)
查看documentation。使用以下设置:
$Data::Dumper::Pair = ' ';
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Terse = 1;
...
print Dumper( \%x );