in reply to Process mail logs
An interesting alternative if you need non-trivial processing for each operation is to use a dispatch table. Consider:
#!/usr/bin/perl use strict; use warnings; use 5.010; my %ops = ('==' => \&doEq, '=>' => \&doGe, '<=' => \&doLe, '**' => \&d +oStar,); my $opMatch = join '|', map {qr{\Q$_\E}} keys %ops; while (my $line = <DATA>) { chomp($line); my ($op) = $line =~ m{\s($opMatch)\s}; if ($op) { $ops{$op}->($line); } else { print "No op found: $line\n"; } } sub doEq {my ($line) = @_; print "Do da ==: $line\n";} sub doLe {my ($line) = @_; print "Doing <=: $line\n";} sub doGe {my ($line) = @_; print "Doing =>: $line\n";} sub doStar {my ($line) = @_; print "Process **: $line\n";} __DATA__ 1234 <= inb@it.com 1234 <= inb@it.com 1235 => pp <pp@nsd.net> 1235 ++ pp <pp@nsd.net>
Prints:
Doing <=: 1234 <= inb@it.com Doing <=: 1234 <= inb@it.com Doing =>: 1235 => pp <pp@nsd.net> No op found: 1235 ++ pp <pp@nsd.net>
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Process mail logs
by stevbutt (Novice) on Aug 13, 2012 at 14:53 UTC | |
by GrandFather (Saint) on Aug 13, 2012 at 22:59 UTC | |
by stevbutt (Novice) on Aug 13, 2012 at 23:56 UTC |