in reply to Re^3: Empty pattern in regex
in thread Empty pattern in regex

so "//" becomes "m//"

The double quotes are part of the text, not part of the code (as you can infer from them being already around the //).

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^5: Empty pattern in regex
by perlboy_emeritus (Scribe) on Oct 19, 2023 at 14:37 UTC

    Of course, you are probably right, but why did this work?

      % perl -le 'print for a .. z' | perl  -nle 'if (/d/ .. /h/) { next unless "m//"; print }'
      d
      e
      f
      g
      h
    

    Is that just interpolation at work? Do we have to read the source code to understand what is going on here, or is supposed to be going on? Talk about ambiguity... I tried //; m//; and "m//;" on that Foy code I reported and none yielded a successful match. Every example reported:

    No nothing
    $1: 
    $2: 
    $3: 
    $&: Perl
    

    the value from the previous successful match.

      > but why did this work?

      next unless 1; never runs next, as 1 is always true. So is "m//" or any other non-empty string different to 0.

      map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]