I'm no expert, but use re 'debug' seems to offer some insight.

In both cases the last part of the regexp is the longest floating string, so is the part that Perl attempts to match first.

In the first case, all that remains is to match "a" against /.+/. This succeeds, and your code returns true (say returns true if it is able to print anything), thus the whole match succeeds. The code only needs to be executed once.

In the second case, it tries to slot letters into two patterns: /.+/ before the code and /./ after the code, and it has to shuffle them around six times before it gets a success.

Personally, I think it's a bad idea to rely on code embedded in regexps having side-effects. How many times it will be executed, and in what order is pretty unpredictable; a new Perl release could change it.

package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name

In reply to Re: Interesting behavior of regular expression engine by tobyink
in thread Interesting behavior of regular expression engine by lightoverhead

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.