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

2022-08-30 16:27:26

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


答案 1

注意 @tchrist 建议使用 Data::D ump 而不是 Data::D umper。我不知道它,但从它的外观来看,它似乎既更容易使用,又产生更好看和更容易解释的结果。

数据::D总和

上面链接中显示的示例的片段。

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

与 Perl 一样,您可能更喜欢替代解决方案,而不是古老的 Data::D umper:

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

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


推荐