这个“现代Perl”数据:Dumper示例可以修复吗?

时间:2017-05-18 23:02:35

标签: perl data-dumper

代码来自“Modern Perl Fourth Edition”,“Book version P1.0 - October 2015” 它位于论文版本的第3章 - 第81页的“调试嵌套数据结构”标题下。该书还提供PDF版本,可以免费下载。

use Data::Dumper;

my $complex_structure = {
   numbers => [ 1 .. 3 ];
   letters => [ 'a' .. 'c' ],
   objects => {
   breakfast => $continental,
   lunch => $late_tea,
   dinner => $banquet,
   },
};

print Dumper( $my_complex_structure );

“这可能产生如下内容:”

$VAR1 = {
   'numbers' => [
                 1,
                 2,
                 3
                ],
  'letters' => [
                'a',
                'b',
                 'c'
               ],
  'meals' => {
      'dinner' => bless({...}, 'Dinner'),
      'lunch' => bless({...}, 'Lunch'),
      'breakfast' => bless({...}, 'Breakfast'),
  },
};

首先,“$ complex_structure”代码中存在错误 应该有一个逗号,而不是“数字”行后面的分号 变量$ continental,$ late_tea和$ banquet未声明或初始化 使用错误的名称调用Dumper():“$ my_complex_structure”。

代码中的变量$ objects在某种程度上变成输出中的“饭”。

我不确定这是错的,但想知道“祝福”的来源。由于错误,我无法确定作者的意图,但“物体”不是直到本书第7章才开始讨论

以下是我尝试修复(简化)示例的内容,考虑前面关于哈希引用和匿名哈希的示例中的材料:

use Data::Dumper;

my $continental = {entree => 'eggs', side => 'hash browns'};


my $complex_structure =
{
   numbers => [1 .. 3],
   letters => ['a' .. 'c'],
   objects => {
                  breakfast => $continental,          
              },
};

print Dumper($complex_structure);

我在之前的调用中遇到了一个错误,并且在修复之后,这个新代码“正常”按预期生成输出,但我仍然感到困惑 - 尤其是关于本书输出中的“祝福”。

我没有使用Data :: Dumper的经验 原始示例是否足够有意义,以便可以某种方式修改它以运行并产生作者所期望的内容?当书中的例子中的“$ complex_structure”被抛弃时,是否应该有任何“祝福”?

1 个答案:

答案 0 :(得分:1)

您在示例输出中看到的bless是因为被转储的引用引用的 thingies perldoc's wording,而不是我的!)被“祝福” ,即对象。如果您自己在引用上调用bless并将其转储,您将会看到同样的事情。

use strict;
use warnings;

use Data::Dumper;

my $obj = bless( { foo => 1, bar => 2, baz => 3 } );

print Dumper($obj);

事实上,我们这样做:

$VAR1 = bless( {
                 'bar' => 2,
                 'baz' => 3,
                 'foo' => 1
               }, 'main' );