-3

代码来自《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 不知何故在输出中变成了“meals”。

我不确定这是错误的,但想知道“祝福”从何而来。
由于错误,我无法真正确定作者的意思,但直到本书第 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”之类的东西被倾倒时,是否应该有任何“祝福”?

4

1 回答 1

1

bless您在示例输出中看到的是因为被转储的引用引用的东西(perldoc 的措辞,不是我的!)是“祝福”objects。如果你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' );
于 2017-05-18T23:47:05.093 回答