in reply to Change double quote to single quotes

Good afternoon Perl gurus, I have a string that I pull from an entry widget which has backslashes (which are not literals so I am assuming it's double quoted).
This doesn't make any sense. The only place where "double quoted" vs. "single quoted" matters is how it appears in the source code (string literals). It's a compiler issue. If you "pull a string from a widget", it's just that. A string. Not a literal. There's no quoting.
  • Comment on Re: Change double quote to single quotes

Replies are listed 'Best First'.
Re^2: Change double quote to single quotes
by rookie_monk (Novice) on Sep 02, 2010 at 18:22 UTC
    OK, but my problem is that the backslashes are not literally backslashes like how I would like them to be. I would like the string to contain the backslashes. Thanks for your input. -Paul

      In a string value (not a string literal), each backslash is simply a backslash. There are no "literal" vs "special" backslashes in a string value. The problem is that, when interpolating a string into a regex, any backslashes get interpreted as "escaping" backslashes.

      Unfortunately, you chose not to show us any of the code where you interpolate the string into the regex. (The code you did show us has almost nothing to do with your real problem but rather is an attempt to demonstrate what you think the problem might be.)

      When interpolating into a regex, /...$str.../ will interpret the value of $str as a regex (where each backslash escapes the next character, likely changing its meaning). /...\Q$str\E.../ will interpret the value of $str as a plain string. It accomplishes this by doing quotemeta($str). That is, it adds a bunch of backslashes before giving the string to the regex parser.

      If you only want the backslashes to be interpreted as "literal", not the other regex meta characters like dot, star, plus, parens, square brackets, "{1,5}", etc, then just put backslashes only in front of the existing backslashes:

      $str =~ s-\\-\\\\-g; # Change each \ into \\ ... /...$str.../ ...

      - tye        

      I think you want quotemeta at some point.

      E.g. my $GetEnt = quotemeta $ent4->get();