From: OOTANI TAKASHI Date: 2003-07-22T22:49:44+09:00 Subject: [ruby-list:37936] __FILE__ in mswin32 大谷と申します。 難しい話で盛り上がっている横ですいません。 ruby 1.6.8 (2002-12-24) [i586-mswin32] を使っています。 今までエラーメッセージを出す際に、たとえば prog.rb というスクリプトでは STDERR.puts("prog: #$!") としていたのですが、ファイル名を変えることも想定して、 __FILE__ から表示するスクリプト名を得ようとしました。 "#{__FILE__}: #$!" だと、フルパス名になってしまいます。そこで、 "#{File.basename(__FILE__,'.rb')} #$!" としたのですが、パスセパレータの / と \ の違いでbasenameが得られません。 (__FILE__には\区切りのパスが入っているので) File::ALT_SEPARATOR という定数があるので、何かこのような事態の対処が 考えられているのかと思いますが、その心がわかりません。 自分では、 (1)__FILE__の\を/に置き換えてbasenameを使う (2)basenameを使わず自分で正規表現を書いて望みの結果を得る という2案は考えましたが、たかが実行スクリプト名を得るのに大げさな気がして、 結局、元のきめうち版にもどしてしまいました。 質問1: エラーメッセージにスクリプト名を出す、 エレガントなやり方は無いものでしょうか? 質問2: File::ALT_SEPARATOR の持っている心を教えてください。 -- OOTANI TAKASHI