前田です。

# ruby-devへ振りますが、金子さんはruby-devに入ってらっしゃる
# のでしょうか。

In message "[ruby-list:7406] Re: string replace"
KANEKO Naoshi <wbs01621 / mail.wbs.or.jp> wrote:

|でも、\ 1バイトを確実に変換するためには \\\\ と4つ重ねなければ
|いけなというのはさすがにわかりにくいと思います。
|あと、'\\' は \ に対するエスケープですが、'\a' は a に対するエスケープ
|でなく、\a そのものをさすというのも曖昧ですよね。

いっそのこと'を使う時はPascal風にエスケープするのはどうでしょう。
つまり、'そのものを文字列で扱いたい時は

rbc0> ''''
"'"

のように'を連続させるわけです。

そうすれば、\をエスケープのために使う必要がなくなりますよね。
かなり大きな変更になってしまうのが難点ですが...。

-- 
前田 修吾

--- parse.y.orig Fri Apr 10 00:28:02 1998 +++ parse.y Fri Apr 10 00:30:59 1998 @@ -2039,7 +2039,8 @@ strstart = sourceline; newtok(); - while ((c = nextc()) != term) { + for (;;) { + c = nextc(); if (c == -1) { sourceline = strstart; Error("unterminated string meets end of file"); @@ -2052,25 +2053,11 @@ else if (c == '\n') { sourceline++; } - else if (c == '\\') { + else if (c == term) { c = nextc(); - switch (c) { - case '\n': - sourceline++; - continue; - - case '\\': - c = '\\'; + if (c != term) { + pushback(c); break; - - case '\'': - if (term == '\'') { - c = '\''; - break; - } - /* fall through */ - default: - tokadd('\\'); } } tokadd(c);