Что именно делает этот фрагмент кода? - PullRequest
1 голос
/ 27 мая 2011

Что именно делает этот фрагмент кода?

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

Взята из пакета на основе Moose ...
В то время как первый аргумент является хеш-рефом, что делать? (со сдвинутым хешрефом?) Я понимаю, сдвиг (@_) просто не понимаю, что означает

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

1 Ответ

5 голосов
/ 27 мая 2011

Хотя первый элемент @_ является ссылкой на хеш, добавьте содержимое этой ссылки на хеш %args и удалите ссылку из @_.Другими словами, объедините все исходные аргументы хеша в один хеш.

%a = (%a, %b) для некоторой пары хешей %a, а %b аналогично @a = (@a, @b) для некоторой пары массивов @a и @b, объединяя @a и @b в один список и присваивая результат обратно @a.Для массивов есть, конечно, сокращение push @a, @b как раз для этой цели.

...