From: "John W. Krahn" <[EMAIL PROTECTED]>
> Jenda Krynicky wrote:
> > Let's write it as an ordinary program:
> >
> > #!perl -w
> > use strict;
> >
> > sub CleanupLog {
> > my ($from_file, $to_file) = @_;
> > open my $IN, '< ' . $from_file
>
> Since you are using lexically scoped file handles we can also use the
> three argument form of open.
I'm still not used to it :-)
Maybe it's be safer (in case someone needs to run the code in an
older Perl) to use
use FileHandle;
my $IN = new FileHandle;
open $IN, '< ' . $from_file;
> open my $IN, '<', $from_file
>
> > or die "Can't open file $from_file : $!\n";
> > open my $OUT, '> ' . $to_file
> > or die "Can't create file $to_file : $!\n";
> > my $line = '';
> > while (<$IN>) {
> > chomp; # get rid of the newline
> > next if $_ eq ''; # skip empty lines
>
> What happens if $_ eq ' '?
You are right.
next if /^\s*$/;
> > s/\s{2,}/ /g; # replace 2 or more whitespace chars
> > # with a single space
>
> Or simply:
>
> s/\s+/ /g;
I think mine is a bit quicker. Though ... they do not mean the same.
Mine will leave a single tab alone, but convert two tabs to a single
space. Therefore maybe your is better.
> Or for speed:
>
> tr/ \t\r\n\f/ /s;
Yeah, I keep forgetting about tr//s.
> > if ( m{^\d{4}/\d{2}/\d{2} \d\d:\d\d:\d\d} ) {
> > # if the current line starts with a timestamp
> > # ... I assume the YYYY/MM/DD HH:MI:SS format
> > print OUT $line, "\n" if $line;
> ^^^
> Unknown file handle?
A typo. I fixed it in the tested code, but forgot to "backfix" it in
the email.
> > # print the buffer
> > $line = $_;
> > # remember the current line
> > } else {
> > $line .= ' ' . $_;
> > # add the current line to the buffer
> > }
> > }
> > print $OUT $line, "\n" if $line;
> > # print the last buffer
> > close $IN;
> > close $OUT;
> > }
>
> > # now let's process all .log files in the current directory and
> > # write the results to 'Cleaned' subdirectory
> > mkdir 'Cleaned', 0777 unless -d 'Cleaned';
> > opendir my $DIR, '.';
>
> You should _always_ verify that the directory was opened.
>
> opendir my $DIR, '.' or die "Cannot opendir '.': $!";
You're right.
Thanks for pointing out the mistakes and typos :-)
Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed
to get drunk and croon as much as they like.
-- Terry Pratchett in Sourcery
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]