Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: ${^MATCH} sometimes fails in target of substitution?

by space_monk (Chaplain)
on Jun 16, 2013 at 17:38 UTC ( [id://1039234]=note: print w/replies, xml ) Need Help??


in reply to ${^MATCH} sometimes fails in target of substitution?

perlre states:
As a workaround for this problem, Perl 5.10.0 introduces ${^PREMATCH} , ${^MATCH} and ${^POSTMATCH} , which are equivalent to $` , $& and $' , except that they are only guaranteed to be defined after a successful match that was executed with the /p (preserve) modifier.

Update: The problem you have documented is a bug in releases prior to 5.18.See Re: ${^MATCH} sometimes fails in target of substitution?.

Before 5.18 it appears that ${^MATCH} may only be available AFTER the match/replace. Adding print $(^MATCH} to your both example prints 'bcd' e.g.

perl -e '$x = "abcde"; $x =~ s/b../==${^MATCH}==/p; prin +t "$x Match:${^MATCH}\n"' a====e Match:bcd perl -e '$x = "abcde"; $sub="b.."; $x =~ s/$sub/==${^MATCH}==/p; print + "$x Match:${^MATCH}\n"' a==bcd==e Match:bcd

If you spot any bugs in my solutions, it's because I've deliberately left them in as an exercise for the reader! :-)

Replies are listed 'Best First'.
Re^2: ${^MATCH} sometimes fails in target of substitution?
by ikegami (Patriarch) on Jun 17, 2013 at 08:16 UTC

    If you're replacing, there was a successful match. This is a bug.

    Testing reveals this bug has been fixed:

    $ perl -v | grep 'This is' This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-li +nux-thread-multi $ perl -E'$_ = "abcde"; s/b../==${^MATCH}==/p; say' a====e $ perl -E'$_ = "abcde"; $sub="b.."; s/$sub/==${^MATCH}==/p; say' a==bcd==e
    $ perl -v | grep 'This is' This is perl 5, version 18, subversion 0 (v5.18.0) built for x86_64-li +nux-thread-multi $ perl -E'$_ = "abcde"; s/b../==${^MATCH}==/p; say' a==bcd==e $ perl -E'$_ = "abcde"; $sub="b.."; s/$sub/==${^MATCH}==/p; say' a==bcd==e

      Thanks, I amended my answer to reflect your comment and the earlier one of dave_the_m.

      If you spot any bugs in my solutions, it's because I've deliberately left them in as an exercise for the reader! :-)

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (7)
As of 2024-04-16 17:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found