【发布时间】:2011-07-10 09:52:29
【问题描述】:
从文件中获取信息,该文件以这种格式逐个输出条目: IPAddress x x [date:time -x] "method url httpversion" statuscode bytes "referer" "useragent"
您将如何以命令行参数的形式访问该文件并存储该信息,以便您可以按 IP 地址的字母顺序排列它,同时将所有信息放在一起?我假设我需要以某种方式使用哈希和数组。
理论上,您可以拥有任意数量的文本文件作为命令行参数,但到目前为止,我还没有让这部分工作,我只有:
./logprocess.pl monster.log #monster.log is the file that contains entries
然后在代码中,假设所有未指定的变量都被声明为标量
my $x = 0;
my @hashstuff;
my $importPage = $ARGV[0];
my @pageFile = `$importPage`;
foreach my $line (@pageFile)
{
$ipaddy, $date, $time, $method, $url, $httpvers, $statuscode, $bytes, $referer, $useragent =~ m#(\d+.\d+.\d+.\d+) \S+ \S+ [(\d+/\S+/\d+):(\d+:\d+:\d+) \S+] "(\S+) (\S+) (\S+)" (\d+) (\d+) "(\S+)" "(\S+ \S+ \S+ \S+ \S+)"#
%info = ('ipaddy' => $ipaddy, 'date' => $date, 'time' => $time, 'method' => $method, 'url' => $url, 'httpvers' => $httpvers, 'statuscode' => $statuscode, 'bytes' => $bytes, 'referer' => $referer, 'useragent' => $useragent);
$hashstuff[$x] = %info;
$x++;
}
肯定有更好的方法来做到这一点,因为我的编译器说我有全局符号错误,例如:
在 ./logprocess.pl 第 51 行 (#2) 中将 % 的歧义使用解析为运算符 % (W ambiguous)(S) 你说的东西可能不会被这样理解 你以为。通常很容易通过提供来消除歧义 缺少引号、运算符、括号对或声明。
它不会执行。我不能使用任何模块。
【问题讨论】:
-
你知道第 3 行告诉 Perl 执行
monster.log命令并用它的输出行填充@pageFile吗?只要有可能,只需使用while (<>)来读取所有 argumnets 的所有行。你知道每个 Perl 脚本都必须以use strict; use warnings;开头吗?
标签: perl apache logging analyzer