Backslash substitution question

R

Ron Coutts

I'm having trouble with backslashes and I don't know what is wrong. I
can't seem to write and expression that will evaluate to a string
containing a single backslash character as in "\". It seems that "\\"
in Ruby evaluates to "\\" not to "\" as I would expect. Below are a few
things I've tried. If anyone could send back a quick answer it would be
much appreciated.

res = "c:/foo/bar".gsub(/\//, "\\") # -> c:\\foo\\bar
res = "c:/foo/bar".gsub(/\//, '\\') # -> c:\\foo\\bar
#res = "c:/foo/bar".gsub(/\//, "\") # -> syntax error - unterminated
string meets end of file
#res = "c:/foo/bar".gsub(/\//, '\') # -> syntax error - unterminated
string meets end of file
res = "c:/foo/bar".gsub(/\//) { "\\"} # -> c:\\foo\\bar

Ron
 
H

Hal Fulton

Ron said:
I'm having trouble with backslashes and I don't know what is wrong. I
can't seem to write and expression that will evaluate to a string
containing a single backslash character as in "\". It seems that "\\"
in Ruby evaluates to "\\" not to "\" as I would expect. Below are a few
things I've tried. If anyone could send back a quick answer it would be
much appreciated.

res = "c:/foo/bar".gsub(/\//, "\\") # -> c:\\foo\\bar

This one works. You're getting confused by either irb
or by calling p. You're seeing the escaped form, but it's
not stored that way internally.

Note that res.length is 10, not 12.

Hal
 
E

Eric Hodel

--oJAv8lSwuaQsYd0G
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
I'm having trouble with backslashes and I don't know what is wrong. I
can't seem to write and expression that will evaluate to a string
containing a single backslash character as in "\". It seems that "\\"
in Ruby evaluates to "\\" not to "\" as I would expect. Below are a few
things I've tried. If anyone could send back a quick answer it would be
much appreciated.
=20
res =3D "c:/foo/bar".gsub(/\//, "\\") # -> c:\\foo\\bar
res =3D "c:/foo/bar".gsub(/\//, '\\') # -> c:\\foo\\bar
#res =3D "c:/foo/bar".gsub(/\//, "\") # -> syntax error - unterminated
string meets end of file
#res =3D "c:/foo/bar".gsub(/\//, '\') # -> syntax error - unterminated
string meets end of file
res =3D "c:/foo/bar".gsub(/\//) { "\\"} # -> c:\\foo\\bar

Ruby maps between / and \ in filenames on win32 just fine, why not let
it do the work for you? For cmd.exe, it doesn't cane if you give it \
or /, but tab completion doesn't work on /. (I believe I read somewhere
that the guts don't care, since back in the DOS days, but my mind could
be addled).

See also File.join and File.expand_path

--=20
Eric Hodel - (e-mail address removed) - http://segment7.net
All messages signed with fingerprint:
FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04


--oJAv8lSwuaQsYd0G
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (FreeBSD)

iD8DBQE/sWJPMypVHHlsnwQRAop4AKC9nNPPYa/D6DwkAapjPBAf5rB2NQCdFDv9
48mLS3fn2QLE6lMZMghOr88=
=H0Ef
-----END PGP SIGNATURE-----

--oJAv8lSwuaQsYd0G--
 
R

Ryan Pavlik

I'm having trouble with backslashes and I don't know what is wrong. I
can't seem to write and expression that will evaluate to a string
containing a single backslash character as in "\". It seems that "\\"
in Ruby evaluates to "\\" not to "\" as I would expect. Below are a few
things I've tried. If anyone could send back a quick answer it would be
much appreciated.

In any ruby string literal, backslash escapes the next character.
This is so you can write:

puts "\"hello world\"" # => "hello world"

It escapes itself, too, so you have a way of printing backslashes:

puts "\\" # => \

It works inside single quotes, so you can escape single quotes:

puts '\'' # => '

That means it needs to escape itself as well, otherwise you couldn't
print a backslash:

puts '\\' # => \

This also works inside docstrings.

hth,
 
R

Ryan Pavlik

On Wed, 12 Nov 2003 07:30:08 +0900

<basic obvious stuff>

Sorry, after seeing others post, I realize I misunderstood your
question. Yeah, what they said. Always test with puts/print. ;-)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,076
Latest member
OrderKetoBeez

Latest Threads

Top