2011-05-27 39 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