-1

我已经查看了有关此问题的其他答案,但仍然不确定为什么会遇到此问题:在模式匹配中使用未初始化的值 (m//)

my $curr = 0;
my (@up_intf, @nh_ID);
my $line = "";
for (my $index = 0; $index < length(@lines); $index++) {
       $line = $lines[$index];
       print("The line is: $line");
       if (($line =~ /^Group:/i)) {
          while (1) {
             if (($line =~ /^Uptime:/i)) { last; }
             else {
               $index++;
               $line = $lines[$index];
               if (($line =~ /^Downstream/i)) {
                  $index++;
                  $line = $lines[$index];
                  print($line);
                  $up_intf[$curr] = $line;
               }
               if (($line =~ /^Next-hop/i)) {
                  $nh_ID[$curr] = substr($line, 13, ((length($line) - 13)));
                  print($line);
                  $curr++;
               }
              }
            }
        }
}

谢谢!

4

1 回答 1

3

你的循环应该是:

for (my $index = 0; $index < $#lines; $index++) {

还有很多其他的错误,但这是一个起点。

$#lines给出 while 的最后一个索引@linesscalar @lines给出@lines. length @lines不做你认为它做的事。

查看您的循环:

           if (($line =~ /^Downstream/i)) {
              $index++;
              $line = $lines[$index];
              print($line);
              $up_intf[$curr] = $line;
           }

如果最后一行匹配/^Downstream/i怎么办?然后,您将未定义的值分配给$line并继续:

          if (($line =~ /^Next-hop/i)) {
              $nh_ID[$curr] = substr($line, 13, ((length($line) - 13)));
              print($line);
              $curr++;
           }

你会在哪里得到警告。

由于缺乏更好的术语,您进行处理的方式是古怪的。

于 2013-08-29T18:35:42.847 回答