较旧的perl版本中的警告消息

时间:2013-08-21 11:35:00

标签: arrays perl hash warnings

我的脚本中有以下代码:

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) {

这是什么意思?

2 个答案:

答案 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))。