ark*_*mvm 0 perl arguments function shift
在perl中所有sub的参数写入@_数组,如下所示:
call_any_sub($a,$b,$c);
sub call_any_sub {
my $s_a = shift;
my $s_b = shift;
my $s_c = shift;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想将数组作为参数传递给sub,我应该使用:
call_any_sub(@data_array);
sub call_any_sub {
my @data = @_;
}
Run Code Online (Sandbox Code Playgroud)
而不是类似的:
call_any_sub(@data_array);
sub call_any_sub {
my @data = shift;
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么@data_array会替换参数数组而不是写入(正如预期的那样)?
人们只能将一个标量列表传递给子程序(这就是他们可以返回的全部内容).毕竟,参数作为array(@_)呈现给sub ,而数组只能包含标量.
您可以(低效率)在sub中重新创建数组
sub foo {
my @bars = @_;
say for @bars;
}
foo(@bars);
Run Code Online (Sandbox Code Playgroud)
或者您可以传递对数组的引用
sub foo {
my ($bars) = @_;
say for @$bars;
}
foo(\@bars);
Run Code Online (Sandbox Code Playgroud)