Mik*_*ike 5 perl arguments function
是否可以将两个列表传递给subPerl中的一个,例如:
sub Foo {
my(@list1,@list2) = @_;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以制作@_两个列表,每个子列表都是所需的参数,我只是想知道是否有更清洁的方法
dao*_*oad 10
好吧,如果你想要两个数组,你可以使用原型:
sub foo (\@\@) {
my $arr1 = shift;
my $arr2 = shift;
# Access arrays as references
}
foo( @wiz, @waz ); # @wiz and @waz won't be flattened.
Run Code Online (Sandbox Code Playgroud)
但是有许多方法可以绕过原型,我更喜欢在大多数地方避开它们.您可以简单地跳过原型并手动传递引用:
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
Run Code Online (Sandbox Code Playgroud)
如果您还没有使用过引用,请查看perlreftut以获得一个很好的教程.
如果你按值传递两个列表......你将获得一个大的列表@_.
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);
Run Code Online (Sandbox Code Playgroud)
这将最终打印:
1 2 3 5 6 7
<blank line>
Run Code Online (Sandbox Code Playgroud)
要传递两个数组,您需要通过引用传递它们:
test(\@array1, \@array2);
Run Code Online (Sandbox Code Playgroud)
在您的潜艇中,您需要将它们视为参考:
sub test
{
my ($arrayRef1, $arrayRef2) = @_;
print "@$arrayRef1\n";
print "@$arrayRef2\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
820 次 |
| 最近记录: |