I'm writing a Perl script to parse 31 maillog files. The files are named
maillog, maillog.1, and so on up to 31. This is the default logrotate
scheme for naming rotated logs.
My current order for processing these files is this:
1) Open the directory.
2) List maillog* files in the directory and assign them to @maillog.
3) Open each file in @maillog and search it for two specific strings.
Assign matching strings to @parsedmail.
4) Print @parsedmail.
I've tested the search string on a single maillog file and it works as
expected, but putting this script together doesn't work correctly. I
think it has something to do with the way I'm trying to pass the array
to open(FILE...). The script is listed below.
(Note that the maillogs in questions were moved from our mail server to
a Windows machine for parsing. Also, the script is being run from the
directory that contains the maillogs--hence the "." for the DIR to open.
And "print @maillog" is hashed out as it tested good--that is, is prints
the array and contains the file names I expected to be there.)
#!C:\Perl\bin\perl.exe
use strict;
use warnings;
use Carp;
my @maillog;
opendir(DIR, '.') or croak "Can't open .$!";
while ($_ = readdir(DIR)) {
if($_ =~ /^maillog.*$/) {
push(@maillog,$_);
}
}
closedir DIR;
#print @maillog;
my @parsedmail;
while ($_ = @maillog) {
open(FILE,'<$_') or croak "Can't open $_$!";
while($_ = <FILE>) {
if($_ =~ /.*imapd.*Log.*user.*$/ || /.*pop3d.*Log.*user.*$/) {
push(@parsedmail,$_);
}
}
close(FILE);
}
print @parsedmail;
The error I get after executing this script is: "Can't open 32No such
file or directory at H:\User Files\Mail Logs\parse.pl line 31" Maybe a
coincidence, but "32" is the number of maillog files in this directory.
Can anyone offer any advice for correcting this?
Thanks, in advance, for the help!
~ Tom
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/