Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Unrecognized escape \Q passed through in regex

by BrowserUk (Patriarch)
on Jan 26, 2006 at 18:40 UTC ( [id://525810]=note: print w/replies, xml ) Need Help??


in reply to Unrecognized escape \Q passed through in regex

It would be a lot more helpful if you would supply a single snippet that produced the error, rather than lots of little bits with no context.

I haven't been able to reproduce your error exactly, but at least part of the problem is that \b means something different when interpolated in a string, than when interpolated in a regex. A backspace versus word boundary.

However, the fact that when you print $regex out having interpolated it into a string, it gets printed as \b\QRenata\E\b means that the contents of $regex must originally be (something like):

\\b\\QRenata\\E\\b

And when you try to use that as a regex, the escaped (doubled) backslashes means that the regex engine will not recognise the escape sequences.

That I cannot reproduce the errors you are seeing probably means that your snippets do not reflect what you are really doing in your code, and I haven't been able to read between the lines sufficiently to guess what it is that you are actually doing.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: Unrecognized escape \Q passed through in regex
by Articuno (Beadle) on Jan 26, 2006 at 19:03 UTC
    Last Update: BrowserUK: this reproduces the errors, err, warnings I've received
    perl -e 'use warnings; $teste=q(\Qfoo\E);print 42 if "(foo" =~ m/\b$t +este\b/'



    1. The "\b" is not the problem... It used to work before my "\Q...\E" problem.
    update: At least I thought I worked. All my regexes should have \b...\b as boundaries... I think if they were interpreted as backspaces, the entire regex would never match (text don't have backspaces), and we would've noticed the absence of filtering. (the program is a kind of filter)

    2. The code is a real copy-paste from my program. What i've ommited was unimportant (for example, DB queries, what i do with the return value, etc...).

    3. I don't know why you say the content of $regex has to have "double slashes"... below is an example where the content of $x has only 1 slash and the printed version has 1 slash too

    perl -e '$x = q(\b); $y = "$x"; print $y'
    Update:Ok, I know the two, '\b' and "\\b" are equivalent. The point is, there is no "..." involved. I think when i get a string from a DB it comes as a '...', and putting it inside a "..." doesn't interpolate it's own content
    -- 6x9=42

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (2)
As of 2024-04-19 20:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found