in reply to Super Duper Inefficient

I note the line:
next if ($hostid ne $SERVER{$server});
Why not split @DATAinto lots of $hostid. Try:
my %new_data = (); foreach ( @DATA ) { my ($hostid, $rest) = split /\t/, $_, 2; push @{$new_data{$hostid}}, "$hostid\t$rest"; }
Then instead of running through @DATA for each $hostid you can just run through @{$new_data{$hostid}} once you have determined $hostid

--tidiness is the memory loss of environmental mnemonics

Replies are listed 'Best First'.
Re: Re: Super Duper Inefficient
by Anonymous Monk on Jun 20, 2003 at 13:35 UTC
    I was formulating this same response myself, but I'll provide a minor variation, which does pretty much the same, but uses automatic variables instead of temporary placeholder variables:
    my %new_data = (); foreach ( @DATA ) { /^(.*?)\t.*$/; push @{$new_data{$1}}, $_; }
    Either case is equally valid in my eyes - I do not know which is faster, the split() or //, so I'll leave that to better souls than mine to answer on.

    The important thing I'd like to point out is that the above method - ran as a step before the server loop - effectively reduces your redundancy to two reads - once to populate the hash, and then once for the server-specific loop.