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 having an uproarious good time at the Monastery: (13)
As of 2015-07-02 22:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (45 votes), past polls