From: "akira yamada / やまだあきら" Date: 2000-10-02T06:11:46+09:00 Subject: [ruby-dev:11106] ext/extmk.rb.in have_header("X-Y.h") というのではまったんですが exmk.rb.in は意図としてはこうでしょうか? diff -ruN ruby-1.6.1.orig/ext/extmk.rb.in ruby-1.6.1/ext/dbm/extmk.rb.in --- ruby-1.6.1.orig/ext/extmk.rb.in Fri Sep 22 14:03:09 2000 +++ ruby-1.6.1/ext/extmk.rb.in Mon Oct 2 02:51:43 2000 @@ -260,7 +260,7 @@ SRC return false end - header.tr!("a-z./\055", "A-Z___") + header.tr!("a-z\055./", "A-Z___") $defs.push(format("-DHAVE_%s", header)) return true end (lib/mkmf.rb の have_header はこのパッチのようになっています) あと, なんかやってるうちによくわかんなくなってきたんですが 以下は意図された動作でしょうか? $ ruby --version ruby 1.6.1 (2000-09-27) [i486-linux] $ cat /tmp/x.rb def test(trsrc, trrepl, target, expect) answer = target.tr(trsrc,trrepl) if expect != answer print < "#{answer}" (expected: "#{expect}") E else print < "#{answer}" E end end t = "a-b,c_d" test "a-z,.-", "A-Z___", t, "A_B_C_D" test "a-z-,.", "A-Z___", t, "A_B_C_D" test "-a-z,.", "_A-Z__", t, "A_B_C_D" test "a-z,-.", "A-Z,-.", t, "A-B,C_D" test "a-z,-.", "A-Z!-#", t, "A\"B!C_D" test "a-z,-.", "A-Z,!.", t, "A!B,C_D" test "-", "-", t, "a-b,c_d" test "-", "!", t, "a!b,c_d" test ".-", "!!", t, "a!b,c_d" test "-.", "!!", t, "a!b,c_d" test "_.", "!!", t, "a-b,c!d" $ ./ruby /tmp/x.rb ng: "a-b,c_d".tr("a-z,.-", "A-Z___") #=> "A-B_C_D" (expected: "A_B_C_D") ok: "a-b,c_d".tr("a-z-,.", "A-Z___") #=> "A_B_C_D" ok: "a-b,c_d".tr("-a-z,.", "_A-Z__") #=> "A_B_C_D" ok: "a-b,c_d".tr("a-z,-.", "A-Z,-.") #=> "A-B,C_D" ok: "a-b,c_d".tr("a-z,-.", "A-Z!-#") #=> "A"B!C_D" ok: "a-b,c_d".tr("a-z,-.", "A-Z,!.") #=> "A!B,C_D" ok: "a-b,c_d".tr("-", "-") #=> "a-b,c_d" ok: "a-b,c_d".tr("-", "!") #=> "a!b,c_d" ng: "a-b,c_d".tr(".-", "!!") #=> "a-b,c_d" (expected: "a!b,c_d") ok: "a-b,c_d".tr("-.", "!!") #=> "a!b,c_d" ok: "a-b,c_d".tr("_.", "!!") #=> "a-b,c!d" ng: としているのが疑問点です. 私としては expected としているような結果になるような気がしてたんですが, そうならないのは仕様でしょうか? なにか見落としてるかもしれませんが… (特に既に話題になっていることだったらごめんなさい) コードをちゃんと読んでない——というか, いいかげんにプチプチいじってたらそう動くようになった って感じなのですが(^_^;), こういう動作ではまずいでしょうか? --- ruby-1.6.1.orig/string.c Tue Sep 26 18:12:25 2000 +++ ruby-1.6.1/string.c Mon Oct 2 05:28:58 2000 @@ -1797,7 +1797,7 @@ if (!t->gen) { if (t->p == t->pend) return -1; t->now = *(USTR)t->p++; - if (t->p < t->pend && *t->p == '-') { + if (t->p < t->pend - 1 && *t->p == '-') { t->p++; if (t->p < t->pend) { if (t->now > *(USTR)t->p) { # 混乱してるのでアホなこと言ってるかも… -- やまだ あきら (akira@arika.org, akira@ruby-lang.org or akira@ad-hoc.org)