Perl 的等价于 PHP 的 print_r() 是啥?

Posted

技术标签:

【中文标题】Perl 的等价于 PHP 的 print_r() 是啥?【英文标题】:What is Perl's equivalent to PHP's print_r()?Perl 的等价于 PHP 的 print_r() 是什么? 【发布时间】:2010-09-18 18:06:05 【问题描述】:

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

【问题讨论】:

在寻找等效功能时,最好解释一下原来的功能。不是每个 Perl 程序员都会知道 PHP 的 print_r() 函数是做什么的。 【参考方案1】:

注意@tchrist 推荐Data::Dump 而不是Data::Dumper。我不知道它,但从它的外观来看,它似乎更容易使用并且产生更好的外观和更容易解释结果。

Data::Dumper:

上面链接中显示的示例的 sn-p。

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);

【讨论】:

确保本地化所有包变量。例如,local $Data::Dumper::Indent = 3; Data::Dump 更胜一筹。 @tchrist:如果你能添加一个解释原因的答案,对于我们这些菜鸟来说,那就太好了。 @naught101 因为Data::Dump 是为易读而设计的。试试看,你会看到的。【参考方案2】:

与通常使用 Perl 一样,您可能更喜欢古老的 Data::Dumper 的替代解决方案:

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

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

【讨论】:

【参考方案3】:

Data::Dumper 的替代方法是Dumpvalue,它不会生成有效的 Perl 代码,而是更易于浏览的格式(与 Perl 调试器的 x 命令相同)。它还消耗更少的内存。

还有Data::Dump::Streamer,在各种边缘和角落的情况下比Data::Dumper更准确。

【讨论】:

【参考方案4】:

我使用Data::Dump,它的输出比 Data::Dumper 的(没有 $VAR1)要干净一些,它提供了快速的快捷方式,并且它还尝试 DTRT,即在 void 上下文中调用时它会打印到 STDERR 并返回不是时的转储字符串。

【讨论】:

【参考方案5】:

我去寻找同样的东西并找到了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...

【讨论】:

在链接页面的任何地方都找不到“可爱的 Perl 小函数”?? @someuser 是的,链接已失效,我已将其更改为存档版本

以上是关于Perl 的等价于 PHP 的 print_r() 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

+= 和 =+

当我将 print_r() 应用于 PHP 中的数组时,为啥会得到“资源 id #4”? [复制]

PHP';s print r的Javascript等价物

jQuery:print_r() 显示等效? [复制]

PHP 等价于 Ruby 符号

什么是 Python 的“perl -V”等价物