如何在Perl函数调用中将哈希扩展到参数列表?

时间:2011-09-26 14:57:36

标签: perl syntax

如何在Perl函数调用中将哈希扩展到参数列表?我正在搜索Perl相当于Python的语法:somefunc(**somedict)somefunc(*somelist)。这在Perl中可能吗?

2 个答案:

答案 0 :(得分:3)

在Perl中,所有函数参数都作为列表传递并存储在特殊数组变量@_中。您可以将这些值复制到其他数组,也可以直接复制到散列中(就像使用任何数组/列表一样)。

如果您正在编写函数,可以将参数直接传递给数组或散列:

sub hashFunc {
    my %args = @_;

    ....
}

sub arrayFunc {
    my @args = @_;

    ...
}

要调用这样的函数,只需传递它们就像它们是列表或散列一样:

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

如果你已经在变量中有参数,只需传递它们,Perl将数组/哈希展平为参数列表:

hashFunc(%someHash);
arrayFunc(@someArray);

答案 1 :(得分:2)

哈希在调用函数时会扩展到列表中:

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

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

foo %h;