我已经查看了有关此问题的其他答案,但我仍然不确定为什么会出现此问题:在模式匹配中使用未初始化的值(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++;
}
}
}
}
}
谢谢!
答案 0 :(得分:3)
你的循环应该是:
for (my $index = 0; $index < $#lines; $index++) {
还有很多其他问题,但这是一个起点。
$#lines
给出@lines
的最后一个索引,而scalar @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++;
}
你会得到警告。
由于缺乏更好的术语,你正在进行处理的方式很糟糕。