代码之家  ›  专栏  ›  技术社区  ›  Steve M

Perl与php的print_r()的等价物是什么?

  •  25
  • Steve M  · 技术社区  · 16 年前

    我发现php中的print_r非常有用,但不知道perl中是否有远程等效的东西?

    5 回复  |  直到 10 年前
        1
  •  42
  •   spinkus    10 年前

    注意@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);
    
        2
  •  8
  •   mirod    16 年前

    与通常使用Perl时一样,您可能更喜欢其他解决方案,而不是古老的Data::Dumper:

    • Data::Dump::Streamer 有一个比Data::Dumper更好的terser输出,也可以序列化一些比Data::Dumper更好的数据,
    • YAML (或) Yaml::Syck 或其他yaml模块)生成yaml中的数据,该数据非常清晰。

    当然,使用调试器,您可以使用“x”命令显示任何变量。我特别喜欢这个表格 x 2 $complex_structure '其中2(或任何数字)告诉调试器只显示2级嵌套数据。

        3
  •  6
  •   Aristotle Pagaltzis    16 年前

    替代 Data::Dumper 它不会产生有效的Perl代码,而是一种更易于浏览的格式(与 x perl调试器的命令)是 Dumpvalue . 它也会消耗更少的内存。

    还有,有 Data::Dump::Streamer ,在各种边角情况下比 数据::翻车机 是。

        4
  •  2
  •   kixx    14 年前

    我用 Data::Dump 它的输出比data::dumper的(不是$var1)要干净一点,它提供了快速的快捷方式,还尝试DTRT,即在void上下文中调用时,它将打印到stderr,在不使用时返回转储字符串。

        5
  •  2
  •   user    11 年前

    我去找同样的东西,发现 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...