[Israel.pm] What is happening here (or -why) ?

Yuval Kogman nothingmuch at woobling.org
Mon Jun 7 07:58:43 PDT 2010


On 7 June 2010 14:42, Yossi Itzkovich <Yossi.Itzkovich at ecitele.com> wrote:
>
> Does it means there are two passes on the reg ex: one that  interpolates
> the dollar as a scalar, and the second that treats it as a regex
> metacharacter ?
>
Sort of.

There are two passes, but there are two '$' characters, which are distinct.

The first is the $ that appears in the program that signifies a variable,
and the second is the $ that was read from input was inside the variable.

To compile the regex Perl first interpolates variables (presumably
containing subpatterns), so:

    my $input = ".*"; # or better written as qr/.*/;
    /$input/;

is the same as:

    /.*/;

However, in your program contains the *string* '$input', which will not be
further interpolated (unless you manually call string eval).

Once the regex is constructed as a string, it's parsed with the regex
syntax. At this point the '$' is a zero width assertion, and the string
"input" found after it is a string literal.

This doesn't really make sense for line by line matching, but the pattern
'$input' could be useful using the /m modifier (matching a line starting
with "input" that isn't the first line in the string).

In order to match a literal $ you need to escape it in the pattern,
regardless of whether or not you use interpolation.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.perl.org.il/pipermail/perl/attachments/20100607/88c24f5a/attachment-0001.htm 


More information about the Perl mailing list