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() 是啥?的主要内容,如果未能解决你的问题,请参考以下文章