Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Re: virus log parser

by rincew (Novice)
on Jul 02, 2002 at 21:56 UTC ( #179010=note: print w/ replies, xml ) Need Help??


in reply to Re: virus log parser
in thread virus log parser

I would like to add some random thoughts I had when I saw your code.

First of all, the construct

foreach(qw(name to file action virus)) { $gCurRec->{$_}=''; }
can be expressed very succinctly using so called hash slices, i.e.
my @columns = qw(name to file action virus); @{ $gCurRec }{ @columns } = ('') x @columns;
See for example this for a good introduction.

Furthermore, why do you use a hash reference to store the data when a hash would be sufficient? (This is probably a matter of style.)

Then, I usually consider multiple repeated lines with trivial differences like

$gCurRec->{name}=$1 if (/^From:\s*(.+?)\s*$/); $gCurRec->{to}=$1 if (/^To:\s*(.+?)\s*$/);
to be a sign that some kind of abstraction like a loop is needed. In this case, keying each datum by its header field
/^(\w+):\s*(.+?)\s*$/ and $gCurRec->{$1} = $2;
does so and furthermore removes the need to spell out the interesting header fields several times. This of course means that unknown fields like the Date: are ignored, but your code ignores them as well.

So finally here is my attempt at implementing your algorithm:

#!/usr/bin/perl -w use strict; my %gCurRec = (); while(<DATA>) { /^-+\s*$/ and do { print join("\t", map { exists $gCurRec{$_} ? $gCurRec{$_} : '' } qw(from to file action virus) ) . "\n"; %gCurRec = (); next; }; /^(\w+):\s*(.+?)\s*$/ and $gCurRec{lc $1} = $2; } __DATA__ From: pminich@foo.com To: esquared@foofoo.com File: value.scr Action: The uncleanable file is deleted. Virus: WORM_KLEZ.H ---------------------------------- Date: 06/30/2002 00:01:21 From: mef@mememe.com To: inet@microsoft.com File: Nr.pif Action: The uncleanable file is deleted. Virus: WORM_KLEZ.H ----------------------------------


Comment on Re: Re: virus log parser
Select or Download Code
Re: Re: Re: virus log parser
by crazyinsomniac (Prior) on Jul 03, 2002 at 08:56 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://179010]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (10)
As of 2014-07-23 05:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (133 votes), past polls