Hi Dennis,
On Wednesday 01 December 2010 11:24:02 Dennis Jakobi wrote:
Hi there,

I have the following problem:

I want to read a logfile in which every line follows this rule:

But the number of values differs. Sometimes a line has 2 values (the
minimum) and sometimes 3 or more values. Now I want to push these
values into a hash that follows that form:

This is what I have so far:
First a few comments on your code:

sub readLog {
my $self = shift;
my $logfile = getFilename();
Are you sure you want to:

1. Use camelCase.

2. Not do $self->get_filename().

3. Call it "get_filename()" instead of "get_log_filename()"?
open LOG, "<$logfile";
Use three-args-open, lexical filehandles, etc:

foreach my $line (<LOG>) {
«while (my $line = <$log>)» would be more preferable here because it will
consume less memory:

my @values = split /\:/, $line;
split /:/ will work just as well, as ":" is not a special character.
... # at this point I don't know what to do :(
OK, here's what you can do (untested):

my $hash_ref = \%hash;

foreach my $val (@values[0 .. $#values-2])
$hash_ref = ($hash_ref->{$val} ||= {});

$hash_ref->{$values[-2]} = $values[-1];

I did not deal with some edge cases, but hopefully it will be OK.


Shlomi Fish

Shlomi Fish http://www.shlomifish.org/
Funny Anti-Terrorism Story - http://shlom.in/enemy

<rindolf> She's a hot chick. But she smokes.
<go|dfish> She can smoke as long as she's smokin'.

Please reply to list if it's a mailing list post - http://shlom.in/reply .

Search Discussions

Discussion Posts


Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 2 of 4 | next ›
Discussion Overview
groupbeginners @
postedDec 1, '10 at 9:24a
activeDec 1, '10 at 10:56a



site design / logo © 2022 Grokbase