use re 'eval'; my $ch = '[a-zA-Z]'; my $palindrome; my $r = "(??{\$palindrome})"; $palindrome = qr/$ch|($ch)($r)?\1/; while (<>) { print if /^$palindrome$/; }