我的脚本中有以下代码:
while (my ($key, $value) = each @values) {
if ( $key < $arraySize-1) {
if ( $values[$key+1] eq "user") {
$endcon=1;
}
}
if ( ( $startcon == 1 ) && ( $endcon != 1 ) ) {
$UptimeString .= $value;
}
if ( $value eq "up") {
$startcon=1;
}
if ( $value eq "average:") {
$LoadMinOne=$values[$key+1];
}
}
在编译它时,在perl 5.14中,我没有警告,但是在perl 5.10.1中,我有这个警告:Type of arg 1 to each must be hash (not private array) at ./uptimep.pl line 21, near "@values) "
第21行是while (my ($key, $value) = each @values) {
这是什么意思?
答案 0 :(得分:4)
正如错误消息中所述,each
必须有参数的哈希,但是你给它一个数组。
您可以替换此行:
while (my ($key, $value) = each @values) {
由:
for my $key(0 .. $#values) {
my $value = $values[$key];
根据doc each
接受数组作为参数来自perl 5.12.0
答案 1 :(得分:-1)
正如它所说,each
期望散列作为参数,而不是数组。
您可以先填充哈希值(my %hash = @values;
)并将其用作参数(while (my ($key, $value) = each %hash)
)。