2

我发现自己一直在使用这种方法来打印 Perl 值:

sub d {
  Data::Dumper->new([])->Terse(1)->Indent(0)->Values([$_[0]])->Dump;
}

say "x = ", d($x), ' y = ', d($y);

我喜欢这个,因为我不想$VAR1 =在我的输出中,而且我很少处理递归数据结构。

但是Data::Dumper每次我调用时创建一个新对象并执行那长长的初始化链的想法让我很d()困扰。

我可以使用另一个字符串化器吗?

4

4 回答 4

5

选项 1,使用Data::Dumper变量

$Data::Dumper::Terse  = 1;
$Data::Dumper::Indent = 0;

say Dumper "x =", Dumper($x), " y = ", Dumper($y);  
于 2011-07-27T21:11:12.130 回答
5
sub d {
  use feature 'state';

  state $dd = Data::Dumper->new([])->Terse(1)->Indent(0);
  return $dd->Values(shift)->Dump;
}

未经测试,但这样的东西应该可以工作。

于 2011-07-27T21:28:40.523 回答
4

我试过Data::Dump了,再也没有回头。

use Data::Dump 'dump';

dump $structure;
于 2011-07-28T08:19:34.927 回答
1

Data::Dumper::Concise很方便。与您需要的设置不同,但可能对其他人有好处。Sortkeys特别是必不可少的

从文档中:

Data::Dumper::Concise;
warn Dumper($var);

相当于:

use Data::Dumper;
{
  local $Data::Dumper::Terse = 1;
  local $Data::Dumper::Indent = 1;
  local $Data::Dumper::Useqq = 1;
  local $Data::Dumper::Deparse = 1;
  local $Data::Dumper::Quotekeys = 0;
  local $Data::Dumper::Sortkeys = 1;
  warn Dumper($var);
}
于 2011-07-28T16:03:19.607 回答