E.C*_*oss 29 perl reference subroutine
可能重复: 如何将一个数组和一个字符串作为参数传递给函数?
我有一个函数或子例程,它将第一个参数作为数组,第二个参数作为标量.例如,
sub calc {
my @array = $_[0];
my $scalar = $_[1];
print @array, $scalar;
}
Run Code Online (Sandbox Code Playgroud)
问题是该函数使数组等于传入的数组的第一个值,并且标量是传入的数组的第二个值.当我想要第一个数组是整个数组时,我不知道需要制作数组的深层副本.例如,
my @array = ('51', 'M');
my $scalar = 21;
Run Code Online (Sandbox Code Playgroud)
和
calc(@array, $scalar)
Run Code Online (Sandbox Code Playgroud)
会51 M在我想要的时候打印51 M 21.
hap*_*ave 49
您需要将其作为参考传递:
calc(\@array, $scalar)
然后访问它: my @array = @{$_[0]};
Jon*_*ler 16
使用对数组的引用作为第一个参数,或者反转参数,以便标量是第一个,然后是数组:
sub reversed_args
{
my($scalar, @array) = @_;
# ...
print @array, $scalar, "\n";
}
my @array = ('51', 'M');
my $scalar = 21;
reversed_args($scalar, @array);
Run Code Online (Sandbox Code Playgroud)
不要尝试Perl 原型(两篇文章,一篇关于Stack Overflow,一篇关于PerlMonks).
Sam*_*kri 10
将数组作为数组ref传递给calc子例程:
calc(\@array, $scalar);
Run Code Online (Sandbox Code Playgroud)
然后在calc子例程中,初始化输入参数,如下所示:
sub calc {
my($array_ref, $scalar) = @_;
foreach my $item (@$array_ref) {
# process each item in the array ref
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将对数组的引用传递给您的函数:
calc(\@array, $scalar);
Run Code Online (Sandbox Code Playgroud)
当您需要在子例程中访问@array的元素时,您可以这样做:
my $array = $_[0];
# access first element of array
print $array->[0];
Run Code Online (Sandbox Code Playgroud)
编辑:由于这是对原始数组的引用,因此子例程中所做的任何更改都将反映在原始数组中.
| 归档时间: |
|
| 查看次数: |
60757 次 |
| 最近记录: |