Mdh*_*ale 1 arrays perl subroutine
我试图将数组和标量传递给子程序.但阵列解除引用似乎存在问题.以下是我的代码
use strict;
use warnings;
my @arr=("95,100", "102,65", "92,34");
my $len=100;
avg($len,\@arr);
sub avg{
my $len = shift;
my $array=@_;
my @new=@{$array};
print @new,"\n";
}
Run Code Online (Sandbox Code Playgroud)
print语句打印此警告:
Can't use string ("1") as an ARRAY ref while "strict refs" in use at test_arr.pl line 13.
Run Code Online (Sandbox Code Playgroud)
在标量上下文中使用数组时,该数组返回其中的元素数.
所以当你说
my $array = @_;
Run Code Online (Sandbox Code Playgroud)
值$array
是1,因为@_
它有一个东西.(你已经shift
关闭了第一个标量.)
所以要解决这个问题,你可以做到
sub avg {
my $len = shift;
my $array_ref = shift;
my @new = @$array_ref;
...
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用并行列表分配
sub avg {
my ( $len, $array_ref ) = @_;
...
Run Code Online (Sandbox Code Playgroud)
或者你可以只猛拉出来的参考@_
直接
sub avg {
my $len = shift;
my @new = @{ $_[0] };
...
Run Code Online (Sandbox Code Playgroud)
我喜欢中间选项.