my @ss = map sort_inner( [ keys %{ $_->[ 0 ] } ] ), sort { $a->[ 1 ] <=> $b->[ 1 ] } map [ $HoHoA{ $_ }, substr( $_, 3 ) ], keys %HoHoA; for my $i ( 0..$#ss-1 ) { my $si = $ss[ $i ]; for my $j ( $i+1..$#ss ) { my $sj = $ss[ $j ]; for my $ki ( @$si ) { for my $kj ( @$sj ) { print "$ki - $kj\n"; } } } } sub sort_inner { return [ map $_->[ 0 ], sort { $a->[ 1 ] <=> $b->[ 1 ] || $a->[ 2 ] <=> $b->[ 2 ] } map [ $_, /\d+/g ], @{ $_[ 0 ] } ] } #### for my $ki ( @$si ) { for my $kj ( @$sj ) { print "$ki - $kj\n"; } } #### for my $i ( 0..$#ss-1 ) { my $si = $ss[ $i ]; for my $j ( $i+1..$#ss ) { my $sj = $ss[ $j ]; # ... } } #### { $a->[ 1 ] <=> $b->[ 1 ] || $a->[ 2 ] <=> $b->[ 2 ] } #### my @ss = map sort_inner( [ keys %{ $HoHoA{ $_->[ 0 ] } } ] ), sort { $a->[ 1 ] <=> $b->[ 1 ] } map [ $_, substr( $_, 3 ) ], keys %HoHoA; #### my @tmp = map $_->[ 0 ], sort { $a->[ 1 ] <=> $b->[ 1 ] } map [ $_, substr( $_, 3 ) ], keys %HoHoA; #### my @ss = map sort_inner( [ keys %{ $HoHoA{ $_ } } ] ), @tmp; #### sort_inner( [ keys %{ $HoHoA{ $k } } ] )