2

我的脚本中有以下代码:

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

这是什么意思?

4

2 回答 2

4

正如错误消息中所说,each参数必须有一个散列,但你给它一个数组。

您可以替换此行:

 while (my ($key, $value) = each @values) {

经过:

for my $key(0 .. $#values) {
    my $value = $values[$key];

根据文档 each接受数组作为来自 perl 5.12.0 的参数

于 2013-08-21T11:39:22.467 回答
-1

正如它所说,each期望哈希作为参数,而不是数组。

您可以先填充散列 ( my %hash = @values;) 并将其用作参数 ( while (my ($key, $value) = each %hash))。

于 2013-08-21T11:47:19.807 回答