use strict; use warnings; sub suffix { my $string = shift; my @array = sort { substr( $string, $a ) cmp substr( $string, $b ) } 0..length($string)-1; $_++ for @array; return @array; } my $n = 200000; my $input = join '', map { ('a'..'z')[rand(26)] } 0..$n-1; my @result = suffix $input; print "@result\n";