What scares me (potential-efficiency-wise) is the fact that you loop over the same array for each key. Not knowing the rest of your code, I'm going to take a stab that generating the list for all keys in a single pass down the list would be better...
To preserve the "remnants" in @ECL_DATA:
# create a "cache": "is this a NETID?" # (if I understand your variables correctly...) my %ids = map { $_ => 1 } values %totalnetname; my %ECLDATA = (); { # lexical scope for leftovers my @leftovers = (); while (my $entry = shift @ECL_STAT) { # ignore non-|-delimited lines next unless my ($netid) = split /\|/, $_; # push lines which begin with any NETID push ( $ids{$netid} ? @{ $ECLDATA{$netid} } : @leftovers ), $_; } @ECL_STAT = @leftovers; } for my $key (@totalkeys) { my $NETID = $totalnetname{$key}; my @ECLDATA = @{ $ECLDATA{$NETID} }; # ... lots, as before. }
If you're reasonably certain that every line begins with a NETID, you could get rid of some of that...
In reply to Re: Grep Effeciency
by baku
in thread Grep Effeciency
by ImpalaSS
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |