2011-05-27 76 views
1

這段代碼片段究竟是什麼?這段代碼片段究竟是什麼?

... 
method go() { 
    my %args; 
    while (ref($_[0]) eq 'HASH') { 
     %args = (%args, %{ shift(@_) }); 
    } 
    .... 
} 

從駝鹿基於包裝中取出...
雖然第一個參數是hashref,怎麼辦呢? (與移出hashref?) 我明白移(@_)根本不明白什麼意思

%hash = (%hash, %{$hashref}); 
+0

另請注意,除了'method'關鍵字之外,我假設MooseX :: Declare,在這段代碼中沒有特定的Moose。 – perigrin 2011-05-27 18:36:43

回答

5

雖然@_的第一個元素是一個散列的引用,即哈希引用的內容添加到散列%args並從@_中刪除引用。換句話說,將所有初始散列參數合併到一個散列中。

%a = (%a, %b)對於一些對散列%a%b的類似於@a = (@a, @b)對於一些對陣列@a@b,接合@a@b成單個列表,並分配所述結果返回給@a的。對於陣列來說,當然這只是一個簡寫push @a, @b

+1

+1,你更快 – bvr 2011-05-27 07:12:48

+0

所以%hash3 =(%hash1,%hash2)是指合併兩個哈希值?似乎需要perldoc perlreftut perldata;) – jm666 2011-05-27 07:16:40

+0

@ jm666:是的。我用更多的解釋編輯了我的答案。 – 2011-05-27 07:18:24