Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Misreading m// documentation (BUG?)

by LanX (Saint)
on Mar 12, 2014 at 11:50 UTC ( [id://1078008]=note: print w/replies, xml ) Need Help??


in reply to Re: Misreading m// documentation
in thread Misreading m// documentation

> If "'" is the delimiter, no interpolation is performed on the PATTERN.

hmm, strange in 5.10 this uncommon feature seems to be buggy:

$ perl if ( '_$x_' =~ '$x') { print "match 1" } if ( '_$x_' =~ /\$x/){ print "match 2" } __DATA__ match 2

while B::Deparse claims both lines to be identical ...

perl -MO=Deparse if ( '_$x_' =~ '$x') { print "match 1" } if ( '_$x_' =~ /\$x/){ print "match 2" } __DATA__ if ('_$x_' =~ /\$x/) { print 'match 1'; } if ('_$x_' =~ /\$x/) { print 'match 2'; } __DATA__ - syntax OK

... does B::Concise show that the interpolation is not inhibited

perl -MO=Concise if ( '_$x_' =~ '$x') { print "match 1" } if ( '_$x_' =~ /\$x/){ print "match 2" } __DATA__ g <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 3 -:1) v:{ ->3 - <1> null vKP/1 ->9 5 <|> and(other->6) vK/1 ->9 4 </> match(/"$x"/) sKS/RTIME ->5 <-- INTERPOLA +TED 3 <$> const[PV "_$x_"] s ->4 - <@> scope vK ->- - <0> ex-nextstate v ->6 8 <@> print vK ->9 6 <0> pushmark s ->7 7 <$> const[PV "match 1"] s ->8 9 <;> nextstate(main 5 -:2) v:{ ->a - <1> null vKP/1 ->g c <|> and(other->d) vK/1 ->g b </> match(/"\\$x"/) sKS/RTIME ->c <-- NO INTERP +OLATION a <$> const[PV "_$x_"] s ->b - <@> scope vK ->- - <0> ex-nextstate v ->d f <@> print vK ->g d <0> pushmark s ->e e <$> const[PV "match 2"] s ->f - syntax OK

added marks to highlight differences.

Can someone please check for other perl versions?

Cheers Rolf

( addicted to the Perl Programming Language)

Replies are listed 'Best First'.
Re^3: Misreading m// documentation (BUG?)
by ikegami (Patriarch) on Mar 12, 2014 at 15:06 UTC

    Bug in Deparse. Still present.

    The regex pattern is

    $x # End of line followed by "x"

    so the literal should be

    m'$x'

    It's the only match operator that will produce exactly that regex pattern.

Re^3: Misreading m// documentation (BUG?)
by Anonymous Monk on Mar 12, 2014 at 12:16 UTC

    shorter example

    interpolation, the \Q\E is interpolated in double quoted strings

    $ perl -Mre=debug -e " $f=q{a??q}; $f =~ m{\Qa??\E}; " Compiling REx "a\?\?" Final program: 1: EXACT <a??> (3) 3: END (0) anchored "a??" at 0 (checking anchored isall) minlen 3 Guessing start of match in sv for REx "a\?\?" against "a??q" Found anchored substr "a??" at offset 0... Guessed: match at offset 0 Freeing REx: "a\?\?"

    use qr to see how \Q\E gets interpolated

    $ perl -le " print qr{\Qa??\E}; " (?^:a\?\?)

    without interpolation the pattern is completely different

    $ perl -le " print qr'\Qa??\E'; " (?^:\Qa??\E)

    The regex metacharcters are still regex metacharacters (pattern)

    $ perl -Mre=debug -e " $f=q{a??q}; $f =~ m'\Qa??\E'; " Compiling REx "\Qa??\E" Final program: 1: EXACT <Q> (3) 3: MINMOD (4) 4: CURLY {0,1} (8) 6: EXACT <a> (0) 8: EXACT <E> (10) 10: END (0) anchored "Q" at 0 floating "E" at 1..2 (checking floating) minlen 2 Guessing start of match in sv for REx "\Qa??\E" against "a??q" Did not find floating substr "E"... Match rejected by optimizer Freeing REx: "\Qa??\E"

    perlrebackslash :)

      Probably you are right, I'm, still too decaffeinated to tell! ;-)

      But then B::Deparse is buggy.

      Cheers Rolf

      ( addicted to the Perl Programming Language)

Re^3: Misreading m// documentation (BUG?)
by Anonymous Monk on Mar 12, 2014 at 12:00 UTC
    Um, $ is still a metacharacter, try '\$x'
        Yes, interpolation means double quoted string, regex metacharacters are still regex metacharacters m/.$/ and m'.$' match the same string

        variables interpolate in double quoted strings but metachars are still metachars

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1078008]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (3)
As of 2024-04-25 10:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found