SLP*_*SLP 2 arrays perl function
我在Perl中使用函数时遇到了麻烦.
我的函数有2个参数是数组:
sub get_coordinate {
my (@array_col, @array_lin) = (@_);
do some stuff
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼它:
$index_col = int(rand(10));
$index_lin = int(rand(10));
@array_col = (0,0,0,0,0,0,0,0,0,0);
@array_lin = (0,0,0,0,0,0,0,0,0,0);
$array_col[$index_col] = 1;
$array_lin[$index_lin] = 1;
get_coordinate(@array_col, @array_lin);
Run Code Online (Sandbox Code Playgroud)
我的问题是我收到错误消息:在switch.pl第82行(#1)的数字eq(==)中使用@array_lin中未初始化的值(未初始化)未使用的值如同已经定义的那样使用.它被解释为""或0,但也许这是一个错误.要禁止此警告,请为变量分配定义的值.
我不明白为什么@array_col被初始化而不是@array_lin.
当我以这种方式在函数内打印@array_col和@array_lin时:
print "@array_col\n@array_lin\n";
Run Code Online (Sandbox Code Playgroud)
我得到:0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0
任何的想法 ?
谢谢,SLP
在Perl中,所有列表都是平的.这两个列表是等效的.
( 1, 2, ( 3, 4, ( 5 ), (6, 7), 8), (), )
( 1, 2, 3, 4, 5, 6, 7, 8 )
Run Code Online (Sandbox Code Playgroud)
当拿几个数组并将它们粘在一个列表中时,也会发生同样的事情.
my @foo = (1, 2, 3);
my @bar = (4, 5, 6);
my @new = (@foo, @bar); # 1, 2, 3, 4, 5, 6
Run Code Online (Sandbox Code Playgroud)
当你将东西传递给一个函数时,这些东西会变成一个参数列表.因此,阵列将二者在一个列表中结束,像@foo和@bar上方.
frobnicate(@foo, @bar);
Run Code Online (Sandbox Code Playgroud)
在列表上下文中分配内容时,将从左到右分配整个列表.对于左侧列表中的标量,这意味着他们将获得其值.但是只要有阵列,就会贪婪.它将吸收所有剩余的值.
my ($one, $two, @rest, $will_be_undef) = (1, 2, 3, 4, 5, 6);
Run Code Online (Sandbox Code Playgroud)
值将按如下方式分配:
$one = 1;
$two = 2;
@rest = ( 3, 4, 5, 6 );
$will_be_undef = undef;
Run Code Online (Sandbox Code Playgroud)
传递两个数组需要做的是获取引用,并在我们的函数中取消引用它们.
frobnicate( \@foo, \@bar );
sub frobnicate {
my ($first_array, $second_array) = @_;
my @foo = @{ $first_array };
my @bar = @{ $second_array };
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |