Как расширить хэш в список аргументов при вызове функции в Perl? - PullRequest
2 голосов
/ 26 сентября 2011

Как расширить хеш в список аргументов при вызове функции в Perl?Я ищу Perl эквивалент синтаксиса Python: somefunc(**somedict) или somefunc(*somelist).Это возможно в Perl?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

В Perl все аргументы функции передаются в виде списков и сохраняются в специальной переменной массива @_. Вы можете скопировать эти значения в какой-то другой массив или напрямую в хеш (как вы можете с любым массивом / списком).

Если вы пишете функцию, вы можете передать аргументы непосредственно в массив или хеш:

sub hashFunc {
    my %args = @_;

    ....
}

sub arrayFunc {
    my @args = @_;

    ...
}

Чтобы вызвать такую ​​функцию, просто передайте их, как если бы они были списком или хешем:

hashFunc(arg1 => 'someVal', arg2 => 'someOtherVal');
arrayFunc('someVal', 'someOtherVal');

Если у вас уже есть аргументы в переменной, просто передайте их, и Perl сгладит массив / хэш в список аргументов:

hashFunc(%someHash);
arrayFunc(@someArray);
2 голосов
/ 26 сентября 2011

Хеши расширяются в список при вызове функции:

my %h = (a => 1, b => 2, c => 3);

sub foo {
  # prints the key-value pairs in unsorted order
  print "@_\n";
}

foo %h;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...