argius note

プログラミング関連

環境変数PATHやCLASSPATHの値をチェックする

sardineさんの日記(id:sardine:20060331)で、「パスのリスト」が含まれる任意の環境変数の値をチェックするツールをD言語で書いてらっしゃいます。
私はこれをPerlRubyで書いてみました。ちょうどRubyのファイル関連を調べていたので、良いお題かと思い、参考にさせていただきました。どちらもone-linerでなるべく短く書いてみました。例は環境変数PATHの値をチェックします。(見栄えのため改行してます。)

$ perl -e 'for(split(/:/,$ENV{shift()})){
print((-e)?((-d)?"d":"f"):"!");print" $_\n"}' PATH

ちなみにDOS窓で実行するときは、'と"を交換する必要がある。それと、パスセパレータのことを考えると、こんな感じ。

perl -e "$s=($^O eq 'MSWin32')?';':':';for(split(/$s/,$ENV{shift()})){
print((-e)?((-d)?'d':'f'):'!');print qq| $_\n|}" PATH

Rubyのone-liner。

ruby -e 'ENV[ARGV.shift()].split(File::PATH_SEPARATOR).each{
p puts((test(?e,p)?File.stat(p).ftype[0,1]:"!")+" "+p)}' PATH
Rubyのキレイバージョンは、
a = ARGV.shift()
e = ENV[a]
e.split(File::PATH_SEPARATOR).each do |p|
  if File.exists?(p)
    m = File.stat(p).ftype[0,1]
  else 
    m = "!"
  end
  puts m + " " + p
end