in reply to Grep Effeciency

If you are scanning an array repeatedly, that is usually a sign that you wanted a hash first. So take your arrays and turn them into hashes of arrays in one step.
foreach @ECL_STAT { if (/^(\w+)/) { # The net id is $1... push @{$ECL_LOOKUP{$1}}, $_; } } # Time passes foreach my $key (@totalkeys) { $NETID = $totalnetname{$key}; @ECL_DATA = @{$ECL_LOOKUP{$NETID}}; # etc }
So you see you scan @ECL_STAT just once to break it up into a hash of arrays, and then you find those arrays when you want them by a hash lookup.

This should be substantially faster.

BTW random note. I didn't change your names, but your variable names are very similar. And your loop variable was not lexical, which suggests to me that you are not using strict. Try using strict and see if that doesn't catch a few bugs...