我对 Perl 很陌生,我正在调整其他人的脚本来解析来自设备的日志文件。忽略脚本前面的任何奇怪之处,我遇到的问题是当它到达 for 循环中的最后一个打印语句时。如果我“使用警告”,而不是打印任何变量,我会收到警告:在第 34 和 35 行使用未初始化的变量。没有变量被初始化,但我不明白为什么。它们在 for 循环之前被初始化。这里发生了什么?
#!/usr/bin/perl
use warnings;
my $datafile = 'router-tcam-acl-out.log';
open DATAFILE, "<$datafile" or die "$datafile: $!";
my @data = <DATAFILE>;
close DATAFILE;
chomp @data;
print @data;
my ($dest_ip, $src_ip, $dest_port, $src_port, $tcp_flags, $protocol, $tos, $dest_mask, $src_mask, $result, $hit_cnt);
foreach my $data (@data) {
if ($data =~ /^_V_\S+\s+(\S+,)\s+(\S+)\s+P=(\S+)\s+P=(\S+)\s+(\S+)\s+(\S+)\s+\S+\s+\S+\s+(\S+) /) {
$dest_ip=$1;
$src_ip=$2;
$dest_port=$3;
$src_port=$4;
$tcp_flags=$5;
$protocol=$6;
$tos=$7;
next;
}
elsif ($data =~ /_M \S+ (\S+) (\S+) /) {
$dest_mask=$1;
$src_mask=$2;
next;
}
elsif ($data =~ /rtr\_rslt_(\S+) hit_cnt=(\S+) /) {
$result=$1;
$hit_cnt=$2
}
print "\n$src_ip,$src_mask,$src_port,$dest_ip,$dest_mask,$dest_port";
print ",$protocol,$tos,$result,$hit_cnt";
}