#!/your/perl/here
# find all palindrome phrases on each line
# only phrases of two or more alpha
# a phrase starts and ends on a word boundary
#
# nested palindrome phrases will also be found
# (including single words)
use strict;
use warnings;
our $N;
my $re =
qr/( # start $1
\b # left word edge
([a-z].*[a-z]) # at least 2 alpha
\b # right word edge
(??{ # start code
local $N = lc $^N; # save capture
$N =~ tr!a-zA-Z!!dc; # remove non-alpha
# fail if not pal
'(?!)' if (lc($N) ne reverse lc($N));
}) # end code
) # end $1
/ix;
while (<DATA>)
{
my $found;
while ( /$re/g )
{
print "line $.:\n" unless $found;
pos = pos() - length($1); # find nested pals
print "(",pos,") \"$1\"\n";
$found = 1; # \n between groups
pos = pos() + 1; # advance one
}
print "\n" if $found;
}
exit;
__DATA__
god dog
alpha beta gamma stop pots wonka wonka wonka
bookkeeper raisinhead
what is a bookkeeper pop repeekkoob tomorrow?
boob tube A man, a plan, a canal, Panama! kook peep aha
aba abba abbba aabbbaa abbba abba aba
produces
__OUTPUT__
line 1:
(0) "god dog"
line 2:
(17) "stop pots"
line 4:
(10) "bookkeeper pop repeekkoob"
(21) "pop"
line 5:
(0) "boob"
(10) "A man, a plan, a canal, Panama"
(42) "kook"
(47) "peep"
(52) "aha"
line 6:
(0) "aba abba abbba aabbbaa abbba abba aba"
(4) "abba abbba aabbbaa abbba abba"
(10) "abbba aabbbaa abbba"
(17) "aabbbaa"
(25) "abbba"
(31) "abba"
(36) "aba"
BTW, if '(?!)' is changed to (?!) (no single quotes), I get a "panic: top_env" from the compiler. Is this a known bug?
-QM
--
Quantum Mechanics: The dreams stuff is made of
|