use v5.12; use warnings; use Data::Dump; my $AoH; debug_loop_join();exit; sub loop_join { my %H; $H{$_} = () for @$AoH; return keys %H; } sub debug_loop_join { $AoH = create_data (.2, 10); ddx [ loop_join ($AoH) ]; ddx [ sort loop_join ($AoH) ]; ddx [ sort {$a cmp $b } loop_join ($AoH) ]; } sub create_data { my ($density, $records) = @_; my @AoH; push @AoH, {map { rand 100 <= $density ? ( $_ => $_ ) : () } "A" .. "ZZ"} for 1 .. $records; return \@AoH; }