青山です。

In message <199805150814.RAA02813 / dumbo.ai.kyutech.ac.jp>, NAGAI Hidetoshi writ
es:
>
>Mac 上で「foo:98/5/1」(ってディレクトリ foo のファイル 98/5/1 
>ということでいいのですよね?(^_^; ) については,
>スクリプト上でのパス区切りを '/' とするのであれば,
>スクリプト上では「foo/98:5:1」として指定します.
>これに対し,OS 上のパス区切りが ':' であれば,
>ファイルアクセスの際に,内部的に「foo:98/5/1」に変換します.
>逆にスクリプト上でのパス区切りを ':' と指定すれば,
>スクリプト上では Mac 的に「foo:98/5/1」と書け,
>UNIX 系では「foo/98:5:1」に変換してアクセスされます.

Mac のファイルサーバーにする時に使われている cap, netatalk がとってい
る方法ですね。実際には : 以外はなんでもありという自由度の高さから、も
う一工夫されています。/ <---> :2f こんな感じです。

NT ではこのようなファイル名の工夫をせず、NT 側で無効な文字は - に置き
換え、各ファイルの本来の名前やリソースの情報を別な所で一括管理するとい
う方法を取っています。(つまり、一方通行)

やはり見やすい文字列としての相互変換は難しいでしょうね。とりあえず現状
では require "a/b" が使われるようになると Mac 側ではその扱いが難しいと
思われます。require "a" + File::Separator + "b" とでも書くようにしない
と...

ということで、ちょっと後向きではありますが、現状では、スクリプト中には
ディレクトリの指定を埋め込まず、埋め込む場合には File::Separator を使
用するというのが安全策でしょうか。

しかし、いちいち File::Separator を使用するのも面倒ですから、もう少し
工夫するとしたら、セパレータを隠して(NT 方式?) ["a", "b"] のようにす
るという手もあるでしょうか。


青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>