in reply to Re^4: how to find particular string and store in to variable
in thread how to find particular string and store in to variable

Isn't that just because the RE didn't match the first time through the loop ...

Yes, and I've clarified the language used above a bit. But I still find the difference interesting: a potential pitfall.


Give a man a fish:  <%-(-(-(-<

Replies are listed 'Best First'.
Re^6: how to find particular string and store in to variable
by 1nickt (Canon) on Jun 25, 2015 at 16:08 UTC

    Anomalous, yes, it is a definite potential pitfall, one into which I have fallen myself. But like many a Perl pitfall, one you are likely to avoid thereafter!

    I can't remember how it was I screwed myself, but I do remember that I started to test whether a RE matched before using a backreference EVERY time thereafter!

    Typically obtuse tchrist documentation in perlre provided the "cluebat" when I eventually found it:

    The numbered match variables ($1, $2, $3, etc.) and the related punctuation set ($+ , $& , $` , $' , and $^N ) are all dynamically scoped until the end of the enclosing block or until the next successful match, whichever comes first. (See Compound Statements in perlsyn.)

    NOTE: failed matches in Perl do not reset the match variables, which makes it easier to write code that tests for a series of more specific cases and remembers the best match.

    (emphasis added)

    So yeah, it's interesting, but documented. Not that that keeps me out of every pitfall I encounter!