什么是Perl相当于PHP print_r()?

时间:2008-10-23 10:00:15

标签: php perl debugging

我发现PHP中的print_r非常有用,但想知道在Perl中是否有任何远程等效的东西?

5 个答案:

答案 0 :(得分:43)

注意@tchrist建议Data::Dump超过Data::Dumper。我没有意识到这一点,但从它的外观来看,它似乎更容易使用,并且产生更好看,更容易解释结果。

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的替代解决方案:

  • Data::Dump::Streamer具有比Data :: Dumper更简洁的输出,并且还可以比Data :: Dumper更好地序列化一些数据,
  • YAML(或Yaml::Syck或其他YAML模块)在YAML中生成数据,这非常清晰。

当然,使用调试器,您可以使用'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...