my @fastarray; my %matches; my %sets; my $span; for my $element (@fastarray) { my $setscounter = 0; next unless defined %{$matches{$element}}; for my $site (sort {$a <=> $b } keys %{$matches{$element}}) { next unless @{$matches{$element}{$site}}; for my $low (@{$matches{$element}{$site}}) { my $lowerlimit = $low + 0; my $upperlimit = $span + $lowerlimit; for my $sitekey (sort {$a <=> $b } keys %{$matches{$element}}) { next unless @{$matches{$element}{$sitekey}}; my @arrayA = (); for my $hElem (@{$matches{$element}{$sitekey}}) { print "...in \$hElem\n"; if ($hElem >= $lowerlimit && $hElem <= $upperlimit) { push (@arrayA, $hElem); } } if (@arrayA) { $sets{$element}[$setscounter]{$sitekey} = \@arrayA; print "\$sets{$element}[$setscounter] is:\n"; print Dumper(%{$sets{$element}[$setscounter]}); @arrayA = (); } else { $sets{$element}[$setscounter]{$sitekey} = undef; } } $setscounter++; } } }