#! perl use strict; use warnings; my %matches; my $s = 'zzAAABCDAAADCBAAABBDAAA'; my $t = $s =~ s/^[^A]*?(AAA.*)/$1/r; while ($t =~ /^AAA.+?AAA/) { my $u = $t; while ($u =~ /^(AAA.+?AAA)/) { my $match = $1; $match =~ s/\|/AAA/g; ++$matches{$match}; $u =~ s/(AAA.+?)AAA/$1\|/; } $t =~ s/^AAA.+?(AAA.*)/$1/; } print $_, "\n" for sort keys %matches; #### 0:15 >perl 563_SoPW.pl AAABBDAAA AAABCDAAA AAABCDAAADCBAAA AAABCDAAADCBAAABBDAAA AAADCBAAA AAADCBAAABBDAAA 0:23 >