Wak*_*nka 0 perl arguments argument-passing
为什么
my $i=0;
my @arr=();
sub readall {
foreach (@_) {
$arr[$i] = shift @_;
$i++;
}
}
readall(1, 2, 3, 4, 5);
print "@arr"
Run Code Online (Sandbox Code Playgroud)
和
my $i=0;
my @arr=();
sub readall {
foreach (@_) {
$arr[$i] = shift @_;
print $arr[$i];
$i++;
}
}
readall(1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)
只打印三个参数readall?
为什么这个函数看起来应该表现得一样,处理所有五个参数?
sub readall {
foreach (@_) {
print $_;
}
}
readall(1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)
这也读取了所有五个(但确实按照不同的原则操作):
my @arr=();
sub readall {
push(@arr, @_);
}
readall(1, 2, 3, 4, 5);
print "@arr"
Run Code Online (Sandbox Code Playgroud)
在同一阵列上使用foreach和shift可能会导致混淆.两个失败的都使用它,两者都不...不.
只是改变shift @_来$_修复它.
发生这种情况是因为您在迭代时缩短了数组.