2017-05-24 51 views
4

關於my $varmy ($var)之間的差異,在閱讀this questionthis question後,我仍然無法明白Data :: Dumper模塊爲什麼會在其代碼的以下摘錄中使用parens。在這些問題的答案中描述的差異似乎並不適用於此。爲什麼Dumper模塊將它的設置散列分配給它?

my($s) = { 
     level  => 0,   # current recursive depth 
     indent  => $Indent,  # various styles of indenting 
     # a bunch of other settings removed for brevity's sake 
     deparse => $Deparse, # use B::Deparse for coderefs 
     noseen  => $Sparseseen, # do not populate the seen hash unless necessary 
     }; 

我在一個小腳本測試了它,我無法感知這個聲明作爲​​3210或my $s任何區別。在這兩種情況下,它都是對散列的標量引用,據我所知。

我錯過了什麼嗎?

回答

4

沒有理由在這裏使用​​3210而不是my $s。我甚至無法理解一種文體原因。這確實很奇怪。

6

我同意,這很奇怪。通常在賦值左側的括號強制右側在列表上下文中而不是標量上下文中進行評估。但是這在上面的例子中沒有完成。

它,然而,似乎是在數據::自卸車的my(...) = ...其他許多不必要的用途,比如這一個一致的:

sub Reset { 
    my($s) = shift; 
    $s->{seen} = {}; 
    return $s; 
} 

不過,這是不是一致的,因爲你還可以找到大量的例子在那裏的不習慣,比如:

my $ref = \$_[1]; 
my $v; 

也許是筆者的一個偶然的個人喜好,否則他們計劃在多任務,從來沒有後......或許多個作者不同優先清理自己的代碼誰猶豫了下來在彼此的腳趾上,或者修理他們認爲未破的東西。但這只是猜測......

相關問題