for my $fastarray ( @fastarray ) { my $hash = $matches{ $fastarray }; for my $site ( sort { $a <=> $b } keys %$hash ) { for my $lowerlimit ( @{ $hash->{ $site } } ) { my $upperlimit = $span + $lowerlimit; for my $sitekey ( sort { $a <=> $b } keys %$hash ) { push @{ $sets{ $fastarray } }, { $sitekey => undef }; my @arrayA = grep { $_ >= $lowerlimit && $_ <= $upperlimit } @{ $hash->{ $sitekey } } or next; $sets{ $fastarray }[ -1 ]{ $sitekey } = \@arrayA; print "\$sets{$fastarray}[-1] is:\n", Dumper $sets{ $fastarray }[ -1 ]; } } }