http://www.perlmonks.org?node_id=1019185


in reply to Conditional regex

But when I use the condition (?{pos() % 2 == 0}), I expect the same output, but I don't get it:

Employ Basic debugging checklist or

add use re 'debug'; to see what the regex engine is doing, and why your match fails

then adjust your pos invocation

Also, your code wont run as is -- come on :) use feature or whatever

Also, I notice the x modifier doesn't work with a conditional pattern:

It does , you just can't have space in condition, it has to be (?(?{, otherwise you couldn't distinguish between some constructs

Replies are listed 'Best First'.
Re^2: Conditional regex
by AnomalousMonk (Archbishop) on Feb 17, 2013 at 19:30 UTC
    It does , you just can't have space ... otherwise you couldn't distinguish between some constructs

    Further to Anonymonk's point: This is common. Eliminating the extraneous space around  ? in the example below allows this pedestrian regex to compile and work as expected.

    >perl -wMstrict -le "print 'match' if 'xxx' =~ m{ ( ? : x ) }xms; " Sequence (? ...) not recognized in regex...
Re^2: Conditional regex
by Anonymous Monk on Feb 17, 2013 at 18:49 UTC

    perlre says

    (?(condition)yes-pattern|no-pattern)

    (?(condition)yes-pattern)

    Conditional expression. Matches yes-pattern if condition yields a true value, matches no-pattern otherwise. A missing pattern always matches.