sub rosetta_code_new { my ( $str ) = @_; my ( @pal, %seen ); for my $n ( 0 .. length( $str ) - 1 ) { for my $m ( 1 .. length( $str ) - $n ) { my $strpal = substr $str, $n, $m; push @pal, $strpal if $strpal eq reverse $strpal and not $seen{ $strpal } ++ } } return @pal } #### Rate rosetta eertree eertree 1159/s -- -27% rosetta 1584/s 37% -- #### Rate rosetta eertree rosetta 387/s -- -31% eertree 565/s 46% --