2017-05-18 68 views
-3

代碼來自「Modern Perl Fourth Edition」,「Book version P1.0 - October 2015」。
它位於標題爲「調試嵌套數據結構」標題下的紙質版本的第3章 - 第81頁。本書還提供PDF版本,可免費下載。這個「現代Perl」數據:Dumper示例是否可以修復?

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」。

代碼中的變量$對象以某種方式在輸出中變爲「用餐」。

我不確定這是錯誤的,但想知道「祝福」從哪裏來。
由於錯誤,我不能真正確定作者的意圖來演示,但「對象」直到本書的第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」被拋棄時,是否應該有任何「祝福」?

+2

究竟什麼是你問? –

+0

事實上,它看起來像有人已經報道:https://pragprog.com/titles/swperl/errata –

+0

唯一的錯誤報告是「對象」/「餐」分歧。這是一個明顯的錯字,但修復它這個例子仍然不會產生類似於輸出的東西 – grjash

回答

1

bless你在樣品輸出看到的是因爲一樣的東西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'); 
+0

*「那些東西是祝福的參考「*不要陷入這個非常常見的陷阱。「祝福」操作符將只接受一個引用,但它是該祝福的引用的目標。 – Borodin

+1

@Borodin好點。我已經調整了我的答案。 –

相關問題