Trailing \ in %qnot treated as literal?


#1

Hi,

I ran the following on a WinXP/SP2 machine:

F:>ruby --version
ruby 1.8.2 (2004-12-25) [i386-mswin32]

F:>ruby -e “puts %q[\a\b\c]”
\a\b\c

F:>ruby -e “puts %q[\a\b\c]”
-e:1: unterminated string meets end of file

F:>

It seems to me the last \ shouldn’t need to be escaped as \, though
that
does work. What’s up?


#2

On 11/19/05, Richard L. removed_email_address@domain.invalid wrote:

F:>ruby -e “puts %q[\a\b\c]”
-e:1: unterminated string meets end of file

F:>

It seems to me the last \ shouldn’t need to be escaped as \, though that
does work. What’s up?

%q[foo] is equivalent to the single-quoted string literal ‘foo’. In
the same way, the only escapable characters are backslash and the
character that ends the literal:

‘Mark’s string’
%q[square (]) bracket]

A literal backslash in a single quoted string only needs to be escaped
where it might be confused as escaping the final quoting character,
like in your example.

HTH,
Mark


#3

In a quoted string, a \cx is an escape for ctrl-x, so the \c] is
interpreted as ctrl-] as the ] is an escape for the bracket in the
quoted
string. Since there is no close bracket you get an error.

Try this…

puts %q[\a\b\c\]

And you get

\a\b\c\

_Kevin


#4

Thanks. I forgot about viewing %q?..? as a generalized single-quoted
string, as one of you said, and as Fulton said in “The Ruby Way”.
Thanks,
guys.