in reply to Stepping through a hash while modifiying its content

Perhaps you can do it with List::Pairwise instead?

use List::Pairwise qw(grepp); # grep hash subset my %subset1 = grepp {$a =~ /^ba/} %hash; my %subset2 = grepp {$b < 5} %hash;

See List::Pairwise

"...and my files are huge"

I don't know how your files look. Perhaps you can provide an example...

I'm just guessing. Regards, Karl

«The Crux of the Biscuit is the Apostrophe»