木村です。今年も宜しくお願いします。

プログラム(スクリプト)の引数として渡されたファイルを別のプログラ
ムで処理させた結果をスクリプトで処理したい。というときの話なんで
すが、↓のように backticks(``)を使うしかないのでしょうか?
#とりあえず自分で pipe(), fork(), exec()するのはなしという前提で
#お願いします

Perlみたいに

  f=open("dumpbin /symbols #{ofile}|", "r")
                                   ^
とできるとうれしいのですが…

以下のスクリプトは、*.objのファイルから必要(と思われる)シンボル
を抜き出すものです。直接*.objの中身は覗けないので、dumpbinという
ツールにシンボルを抜き出させています。
#ところで BCC (or C++ Builder)には同様のツールってあるんでしょうか?

---

undefvars = {}

while ofile = ARGV.shift
  print "; #{ofile}\n"

  #f=open("dumpbin /symbols #{ofile}|", "r")
  #while f.gets
  #  print
  #  next if !/External/
  #  next if !/SECT/
  #  /\| +(.+)$/ =~ $_
  #  extname = $1
  #  extname.gsub!(/^_/, "")
  #  print "#{extname}\n" if extname
  #end
  #f.close

  s = `dumpbin /symbols #{ofile}`
  s.each_line("\n") {
    if (/External/)
      /\| +(.+)$/ =~ $_
      extname = $1
      extname.gsub!(/^_/, "")
      if (/SECT[0-9]/)
        if (/notype \(\)/)
          #print "function\n"
          print "\t#{extname}\n" if extname
        else
          #print "variable\n"
          undefvars[extname] = TRUE
        end
      elsif (/UNDEF/ && /notype(?! \(\))/)
      #elsif (/UNDEF/)
        print "undef #{extname}\n"
        undefvars[extname] = TRUE
      end
    end
  }
end

print "; variables\n"
undefvars.keys.each{|i| print "#{i}\n"}
#print "\t_matherr"

-- 
木村浩一
            May the source be with you.
    e-mail kbk / kt.rim.or.jp
           kkimura / pure.cpdc.canon.co.jp