in reply to Palindrome Program without Reverse function

my $palindrome_re = qr{ \b (?<pal> # A palindrome is a sandwich... (?<char>\w) # starting with white bread... (?: # filled with either... \w? # peanut butter (maybe)... | # or... (?&pal) # another sandwich... ) \k<char> # topped off with white bread! ) \b }x; @ARGV = 'words'; /$palindrome_re/ and print while <>;

Replies are listed 'Best First'.
Re^2: Palindrome Program without Reverse function
by BrowserUk (Patriarch) on Oct 31, 2011 at 05:02 UTC

    Clever, but slow:

    sub isPalindrome{ substr( $_[0], $_, 1 ) eq substr( $_[0], -($_+1), 1 ) or return for 0 .. length( $_[0] ) >> 1; 1; }

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
Re^2: Palindrome Program without Reverse function
by ww (Archbishop) on Oct 31, 2011 at 13:49 UTC
    ...Liked the regex; not so much, lines 15 and 16...
    so tried 5.012 which didn't like 16 either.

    So left the regex alone and re-wrote Lines 15-16 (much more verbosely) to work nicely with 5.12:

    #!/usr/bin/perl use Modern::Perl; # 934820 my $palindrome_re = qr{ \b (?<pal> # A palindrome is a sandwich... (?<char>\w) # starting with white bread... (?: # filled with either... \w? # peanut butter (maybe)... | # or... (?&pal) # another sandwich... ) \k<char> # topped off with white bread! ) \b }ix; my @Rev_arr = qw /Research tattarrattat Kanakanak Qaanaaq Foobarblivit +z/; for my $word(@Rev_arr) { if ($word =~ /$palindrome_re/) { say $word; } else { say "$word is NOT a palindrome"; } }
    Execution:
    C:\>934820.pl Research is NOT a palindrome tattarrattat Kanakanak Qaanaaq Foobarblivitz is NOT a palindrome C:\>