如何在Perl函数调用中将哈希扩展到参数列表?我正在搜索Perl相当于Python的语法:somefunc(**somedict)
或somefunc(*somelist)
。这在Perl中可能吗?
答案 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;