in reply to Unexpected matching results

G'day hdb,

"How can this be?"

The underlying problem is that "$1" can only have one value for each iteration of map.

If you swap the CAUSE and AFFECT (__DATA__) lines, you get the same result; however, if you swap the cause and effect (map) lines, you get both values set to FAIL. Also, removing CAUSE or AFFECT from __DATA__ correctly gives a match result and an UNDEF.

"And how can it be fixed?"

This worked for me:

'cause' => ((/CAUSE (\S+)/)[0] || 'UNDEF'), 'effect' => ((/AFFECT (\S+)/)[0] || 'UNDEF'),
"(Must be a case of Perl punishing my vanity...)"

If you say so :-)

Update: Sorry, not sure what happened, I just typed the wrong words: s{you get the correct result.}{you get both values set to FAIL.}

-- Ken

Replies are listed 'Best First'.
Re^2: Unexpected matching results
by hdb (Monsignor) on Sep 06, 2013 at 08:29 UTC

    Thanks for this alternative solution! The use of quotes around $1 is surely prone to getting "optimized" away. If I see something like "$1" I am always tempted to remove the quotes and thus introduce a bug in these circumstances here.