我有这段代码可以读取traceroute的输出以进行监控。
以下这段代码可以正常使用。
for ($i = 0; $i < $sizeloc; $i++) {
for ($j = 0; $j < 1; $j++) {
if ($j==0) {
system("tracert " . $locations[$i][$j] . " > d:\\netmon\\"
. $locations[$i] [$j+1] );
}
}
}
一旦我调用这个子read_outputfile($ locations [$ i] [$ j + 1]);在循环内部,出现问题。它只迭代一个对象然后我的程序结束。所以第一次调用read_outputfile时它会运行sub中的代码。只是,它不会返回循环。它结束了。
for ($i = 0; $i < $sizeloc; $i++) {
for ($j = 0; $j < 1; $j++) {
if ($j==0) {
system("tracert " . $locations[$i][$j] . " > d:\\netmon\\" .
$locations[$i][$j+1] );
read_outputfile($locations[$i][$j+1]);
}
}
}
sub read_outputfile{
my( $location ) = @_;
open ($location, "$location");
while ($record = <$location>) {
$i++;
if ($i == 8) {
$out = substr($record , 32);
if($out != "88.15.160.255" ) {
mail($location);
}
}
}
close($location);
}
任何输入?
答案 0 :(得分:5)
始终,我的意思是始终,使用以下命令启动Perl脚本:
use strict;
use warnings;
如果添加此项,您很可能会立即收到有关未声明变量的错误消息。修复这些,例如:
for (my $i = 0; $i < $sizeloc; $i++) {
for (my $j = 0; $j < 1; $j++) {
...
}
}
一旦你宣布了所有变量(在合适的范围内),你的问题几乎肯定会消失。
答案 1 :(得分:3)
看起来read_outputfile
将继续增加$i
,直到<$location>
耗尽,此时它可能会大于$sizeloc
,因此您的外部循环将终止。< / p>
正如@bvr建议的那样,您可以通过$i
中的read_outputfile
本地化
sub read_outputfile{
my $i;
etc...