use strict; use warnings; use 5.010; my @words = qw{ hypersensitivities zoology chlorofluorocarbons reinterpretations mississipi }; foreach my $word ( @words ) { say qq{\n** $word **}; printf qq{%2d - %s\n}, $_, substr $word, $_ - 1 for sortPosns( $word ); } sub sortPosns { return map { $_->[ 0 ] } sort { $a->[ 1 ] cmp $b->[ 1 ] } map { [ $_, substr $_[ 0 ], $_ - 1 ] } 1 .. length $_[ 0 ]; }