我发现PHP中的print_r非常有用,但想知道在Perl中是否有任何远程等效的东西?
答案 0 :(得分:43)
注意@tchrist建议Data::Dump超过Data::Dumper。我没有意识到这一点,但从它的外观来看,它似乎更容易使用,并且产生更好看,更容易解释结果。
以上链接中显示的示例摘录。
use Data::Dumper;
package Foo;
sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};
package Fuz; # a weird REF-REF-SCALAR object
sub new {bless \($_ = \ 'fu\'z'), $_[0]};
package main;
$foo = Foo->new;
$fuz = Fuz->new;
$boo = [ 1, [], "abcd", \*foo,
{1 => 'a', 023 => 'b', 0x45 => 'c'},
\\"p\q\'r", $foo, $fuz];
########
# simple usage
########
$bar = eval(Dumper($boo));
print($@) if $@;
print Dumper($boo), Dumper($bar); # pretty print (no array indices)
$Data::Dumper::Terse = 1; # don't output names where feasible
$Data::Dumper::Indent = 0; # turn off all pretty print
print Dumper($boo), "\n";
$Data::Dumper::Indent = 1; # mild pretty print
print Dumper($boo);
$Data::Dumper::Indent = 3; # pretty print with array indices
print Dumper($boo);
$Data::Dumper::Useqq = 1; # print strings in double quotes
print Dumper($boo);
答案 1 :(得分:8)
与Perl一样,您可能更喜欢古老的Data :: Dumper的替代解决方案:
当然,使用调试器,您可以使用'x'命令显示任何变量。我特别喜欢“x 2 $complex_structure
”形式,其中2(或任何数字)告诉调试器只显示2级嵌套数据。
答案 2 :(得分:6)
Data::Dumper的替代方法,它不生成有效的Perl代码,而是更易于浏览的格式(与Perl调试器的x
命令相同)是Dumpvalue。它也消耗了更少的内存。
同样,还有Data::Dump::Streamer,它在各种边缘和角落情况下比Data::Dumper更准确。
答案 3 :(得分:2)
我使用Data::Dump,它的输出比Data :: Dumper(没有$ VAR1)更清晰,它提供了快捷方式,它也尝试DTRT,即在void上下文中调用它时会打印到STDERR并在没有时返回转储字符串。
答案 4 :(得分:2)
我去寻找同样的事情并发现了this lovely little Perl function,明确意味着生成像print_r()这样的结果。
该剧本的作者在论坛here中询问您的确切问题。
print objectToString($json_data);
给出这个输出:
HASH {
time => 1233173875
error => 0
node => HASH {
vid => 1011
moderate => 0
field_datestring => ARRAY {
HASH {
value => August 30, 1979
}
}
field_tagged_persons => ARRAY {
HASH {
nid => undef
}
}
...and so on...