代码来自“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”被抛弃时,是否应该有任何“祝福”?
答案 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' );