namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Q. about mknmz



古川です。

>> On Wed, 25 Feb 1998 19:38:58 +0900, Hiroshi Kato <tumibito@xxxxxxxxxxxxxxxxxxx> said:
  >> 遅いだけですから、できたら見捨てないで欲しいです。
  > お気に悪くされたのなら,ごめんなさいです.

いやいや、まったくそんなことはありませんので。


で、本題ですが、私は大ボケでした。

  >> で、ここで新たな疑問が湧くのですが、私のところでは、1.0.3 のころから
  >> perl5.003 で運用しているのですが、今回の問題には出会いませんでした。

この「'a' cmp 'あ'」の問題に気付いたときには、SunOS4.1.4 + perl5.003
だったのですが、実際に運用するときには、うちのスーパーユーザが気を効か
せて 5.004_01 にしてくれていました。よって「perl5.003 で運用して」は
間違いでした。

混乱させてしまったら、申し訳ありませんでした。


  > ある疑いが頭をかすめたので,ちょっと実験をしてみました.

詳しい調査をありがとうございます。勉強になります。


  > OS		bcmp の返却値	memcmp の返却値
  > -----------------------------------------------
  > SunOS4		1		189
  > HP-UX10.01	-67		-67
  > FreeBSD 2.1.5	1		-67
  > Solaris2.4	1		-67

  > どうやら,仮説どおり OS によって,bcmp(),memcmp() の仕様が異なるようです.

perl のソースは見ていないので、よく分かりませんが、SunOS4.1.4 の場合、
bcmp(3) のマニュアルを見ると、

     bcmp() は b1 と b2 の 2 つのバイト・ストリングを比較して、内
     容 が同一なら 0(ゼロ)を、同一でなければ 0 以外の値を返しま
     す。両ストリングの長さは length で示したバイト数であるとみな
     されます。長さとして 0 を指定すると、bcmp() は比較の結果とし
     て 0 を返します。

と書いてあります。これには、「一致しなければ 0 以外」と書いてあるだけ
で、符号には全く言及されていません。ということは、cmp 演算には bcmp は
使えない、ということでしょうか。

とすると、残るは memcmp(3) ですが、これのマニュアルを見ると、

     memcmp() は、単純な文字比較を使用しており、符号の有無は、 マ
     シ ンによります。したがって、いずれか 1 つの文字の上位ビット
     が ON のとき返る値の符号は、インプリメンテーションに依存しま
     す。

とあります。

もし cmp 演算に memcmp を使っていれば、OS (マシン) によって結果が違う、
という現象に説明がつく、と考えてもよいのでしょうか? > 識者のかた



と、メールを書いていたら、たった今、高林さんからのメールが来ました。

>> On Wed, 25 Feb 1998 20:15:25 +0900, Satoru Takabayashi <ccsatoru@xxxxxxxxxxxxxxxxxx> said:
  > ちょっと考えてみたのですが、この問題が発生するのはおそらく 

お気を遣わせてしまい、本当に申し訳ありません。間違いでした。


  > まさか浜松に住んでいらっしゃったとは :-)。

会社が会社ですから…

-- 

                                        ヤマハ(株)ピアノプレーヤ設計課
                                                              古川 令
                                             furukawa@xxxxxxxxxxxxxxxx