in reply to Adjacent Looping

A more funcional approach:
use List::MoreUtils qw( pairwise ); my @arr = qw( J K L M N O ); my %done; my @pairs = grep !$done{$_}++, # Remove duplicates pairwise { "$a - $b" } @arr; print map "$_\n", @pairs;

The above is basically the same as:

my @arr = qw( J K L M N O ); my %done; my @pairs; while (@arr) { my $pair = join(' - ', splice(@arr, 0, 2)); next if $done{$pair}++; push @pairs, $pair; } print "$_\n" for @pairs;