use strict; # start config my $NeedRepeat = 5 ; my $String = "ABCABCABC1231234123123ABCABCABC123TestTestTestTestTest1234123123123121212121212121212121ppppp"; # end config my $strMaxLen = length ( $String ); my (@res,%temp); foreach my $startPos ( 0 .. $strMaxLen ) { foreach my $getLen ( 0 .. $strMaxLen ) { $String =~ /.{\Q$startPos\E}(.{\Q$getLen\E})/; my $targetPhrase = $1; next unless $targetPhrase; $temp{$1} = 1 if ( $String =~ /(\Q$targetPhrase\E){\Q$NeedRepeat\E}/ ) ; } } @res = sort keys %temp; print $_ . $/ foreach @res;