【发布时间】:2014-03-01 06:55:03
【问题描述】:
在 perl 中,所有 sub 的参数都写入 @_ 数组,如下所示:
call_any_sub($a,$b,$c);
sub call_any_sub {
my $s_a = shift;
my $s_b = shift;
my $s_c = shift;
}
但是,如果我想将数组作为参数传递给 sub,我应该使用:
call_any_sub(@data_array);
sub call_any_sub {
my @data = @_;
}
而不是类似的:
call_any_sub(@data_array);
sub call_any_sub {
my @data = shift;
}
那么,为什么@data_array 替换了参数数组而不是写入其中(如预期的那样)?
【问题讨论】:
-
我明白了,但是为什么
@data_array代替@_而是写在里面,比如@_[0]=>@data_array; @_[1]=>$other_var? -
@Arkham.vm 它没有。数组被展平,其元素传递给您的子例程并插入到
@_。 -
@TLP,实际上是同一个替换,只是丢失了一个指向数组的指针。
标签: perl function arguments shift