[#7356] Q: jcode.rb tr(String + nil) — WATANABE Tetsuya <tetsu@...>

ruby-1.1b9_08 (07 からみたいですが)での話です。

15 messages 1998/04/08
[#7358] Re: Q: jcode.rb tr(String + nil) — matz@... (Yukihiro Matsumoto) 1998/04/08

まつもと ゆきひろです

[#7376] [Q] Thread — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

19 messages 1998/04/08
[#7384] Re: [Q] Thread — keiju@... (Keiju ISHITSUKA) 1998/04/09

けいじゅ@日本ラショナルソフトウェアです.

[#7385] Re: [Q] Thread — matz@... (Yukihiro Matsumoto) 1998/04/09

まつもと ゆきひろです

[#7391] Re: [Q] Thread — keiju@... (石塚圭樹 ) 1998/04/09

けいじゅ@日本ラショナルソフトウェアです.

[#7471] scope — Wakou Aoyama <wakou@...>

青山です。

22 messages 1998/04/15
[#7474] Re: scope — WATANABE Hirofumi <watanabe@...> 1998/04/15

わたなべです.

[#7475] Re: scope — Wakou Aoyama <wakou@...> 1998/04/15

青山です。

[#7500] List on List — WATANABE Hirofumi <watanabe@...>

わたなべです.

26 messages 1998/04/15
[#7501] Re: List on List — matz@... (Yukihiro Matsumoto) 1998/04/15

まつもと ゆきひろです

[#7509] クラスの変更 — Mitsuru Ogino <ogino@...>

荻野といいます。すみませんが、ご指導ください。プログラミング初心者です。

13 messages 1998/04/15

[#7591] How to write Perl's `@a[@b] = @c' in ruby — Inaba Hiroto <inaba@...>

えーと、既に「Perlのmapをrubyでどう書くか」という話題がで出てしまった

29 messages 1998/04/16
[#7601] Re: How to write Perl's `@a[@b] = @c' in ruby — WATANABE Hirofumi <watanabe@...> 1998/04/17

わたなべです.

[#7614] Re: How to write Perl's `@a[@b] = @c' in ruby — Shin-ichiro HARA <sinara@...> 1998/04/17

原です。

[#7626] Re: How to write Perl's `@a[@b] = @c' in ruby — Inaba Hiroto <inaba@...> 1998/04/19

From: Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp>

[#7628] Re: How to write Perl's `@a[@b] = @c' in ruby — Shin-ichiro Hara <sinara@...> 1998/04/19

原です。

[#7659] iteration with index (Re: How to write Perl's `@a[@b] = @c' in ruby) — shugo@... (Shugo Maeda) 1998/04/20

前田です。

[#7671] How to install beta versions — Shin-ichiro HARA <sinara@...>

原です。

32 messages 1998/04/21
[#7672] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/21

まつもと ゆきひろです

[#7674] Re: How to install beta versions — WATANABE Hirofumi <watanabe@...> 1998/04/21

わたなべです.

[#7675] Re: How to install beta versions — WATANABE Tetsuya <tetsu@...> 1998/04/21

>>>>> "W" == WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp> writes:

[#7677] Re: How to install beta versions — Shin-ichiro HARA <sinara@...> 1998/04/21

原です。

[#7679] Re: How to install beta versions — WATANABE Hirofumi <watanabe@...> 1998/04/21

わたなべです.

[#7690] Re: How to install beta versions — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1998/04/21

From: WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>

[#7700] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/22

まつもと ゆきひろです

[#7710] Re: How to install beta versions — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1998/04/22

From: matz@netlab.co.jp (Yukihiro Matsumoto)

[#7711] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/22

まつもと ゆきひろです

[#7720] Re: How to install beta versions — chisaka@... 1998/04/23

[#7721] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/24

まつもと ゆきひろです

[#7724] Re: How to install beta versions — NAGAI Hidetoshi <nagai@...> 1998/04/25

永井@知能.九工大です.

[#7729] mail index sort by From: — Kikutani Makoto <kikutani@...>

きくたにです。

27 messages 1998/04/26
[#7730] mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/26

ごとけんです

[#7738] Re: mail index sort by From: — Kikutani Makoto <kikutani@...> 1998/04/27

きくたにです。

[#7757] Re: mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/28

ごとけんです

[#7758] Re: mail index sort by From: — akira yamada / やまだあきら <akira@...> 1998/04/28

[#7760] Re: mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/28

ごとけんです

[ruby-list:7380] string replace

From: KANEKO Naoshi <wbs01621@...>
Date: 1998-04-08 14:55:59 UTC
List: ruby-list #7380
金子です。


再び、文字列置換の話です。

2日前に次の2つの問題点を指摘しました。

  1) 置換文字列の最後に '\\' があるとき、文字列の終端を超えて
     1バイト余分に出力してしまう。

      => 終端の '\\' は加工せずにそのまま出力。

  2) '\\\\' が '\\' に置換されてしまう。

      => '\\\\' --> '\\\\' として出力。

1)は単純なコーディングミスと思われます。これは問題ないでしょう。
問題は 2) です。
これを perl では '\\\\' は '\\\\' となるし、これもコーディングミス
と思って、perl に合わせるように修正したつもりなのですが、どうも単純
な問題ではないような気がしてきました。

2)の修正を入れてしまうと、1バイトの '\' を正しく表現する方法がな
いような気がするのです。

これは perl では問題になりません。
perl はユーザの記述したテキストを置換時に1回だけ評価するためです。
'\\' のように '\' を重ねればそれは '\' 文字そのものを表します。

対して、ruby ではユーザ記述のテキストを通常の文字列オブジェクトに
するのに1回評価され、その後、置換する際にもう1回評価されます。
このとき、同じメタ文字 \ を別の意味で評価するため、いくつかの副作
用を生じます。
以下に例をあげます。
(この例は 2) の修正を入れたもの仮定してます。)

   a) 括弧に対応する後方参照 \1 をダブルクォーテーションで括る
      文字列中に埋め込む場合、"\\1" のように '\' を重ねて記述
      しなければならない。

   b) 最終的に \1 のような出力結果を得たいとき、簡単に記述する
      方法がない。
      '\\1'と記述すると後方参照と解釈されるし、'\\\1'と記述
      すると、\\1 のような出力結果となる。'\\\\1' でも \\1。
      "\x5c1" も後方参照。

   c) 変数を置換文字列として与えたとき、予期せぬ結果をうむことが
      ある。
      (DOSのディレクトリ名 C:\000\111 の処理など。)
      かつ、それを解決する簡単な手段がない。

現状の ruby では b) の問題はおきません。
"\\\\" と記述することで1バイトの \ に確実に変換できるためです。
また、c) についても 前処理で '\' を二重化してやることでとりあえ
ず回避できます。

# もちろん、イテレータを使えば何でもありは承知しています。

で、結局 ...

perl と違うし、直感的でもないのですが、現在の仕様は正解なので
しょうか?

直感的に、かつ、仕様をすっきりさせるためには、メタ文字を変えて
しまうとかしかないのでしょうか?

# 私の知らない置換文字列の特殊表記法があるっていうのでもいいのですが...


-- 
金子 尚史 (KANEKO Naoshi)   wbs01621@mail.wbs.or.jp

In This Thread

Prev Next