是否可以将两个列表传递给Perl中的sub
,例如:
sub Foo {
my(@list1,@list2) = @_;
}
我知道我可以制作@_
两个列表,每个子列表都是所需的参数,我只是想知道是否有更清洁的方式
答案 0 :(得分:10)
如果你想要两个数组,你可以使用原型:
sub foo (\@\@) {
my $arr1 = shift;
my $arr2 = shift;
# Access arrays as references
}
foo( @wiz, @waz ); # @wiz and @waz won't be flattened.
但是有许多方法可以绕过原型,我更喜欢在大多数地方避开它们。您可以直接跳过原型并手动传递参考:
sub foo {
my $arr1 = shift;
my $arr2 = shift;
# Access arrays as references
}
foo( \@wiz, \@waz ); # Pass in wiz/waz as refs
foo( [1,2,4],[3,5,6] ); # Hard coded arrays
如果您根本没有使用过引用,请查看perlreftut以获得一个很好的教程。
答案 1 :(得分:5)
如果您按值传递两个列表......您将在@_
中获得一个大列表。
my(@list1,@list2) = @_;
没有任何意义:
#!/usr/bin/perl
sub test
{
my (@a, @b) = @_;
print "@a\n";
print "@b\n";
}
my @array1 = (1,2,3);
my @array2 = (5,6,7);
test(@array1, @array2);
这将最终打印:
1 2 3 5 6 7
<blank line>
要传递两个数组,您需要通过引用传递它们:
test(\@array1, \@array2);
在您的潜艇中,您需要将它们视为参考:
sub test
{
my ($arrayRef1, $arrayRef2) = @_;
print "@$arrayRef1\n";
print "@$arrayRef2\n";
}