Rubyで外部プログラムの呼び出しに変数を使う
RubyでもPerlとほぼ同様にコマンドの呼び出しができる.こんな感じ.
system("ruby ./hoge.rb")
出力を取得したい場合は``を使う.これもPerlと同じ
output = `ruby ./hoge.rb`
ここからが落とし穴.Perlでは``の中身に変数を使うことが出来た.Rubyはそうはいかない
command = "hoge ./ruby.rb" output = `command`
こんなことをやろうもんなら,commandが変数なのか文字列なのか判断できない.SigilがついているPerlならそんなことを気にせず変数展開してくれるのにィィィィ.というわけで30分ほど調べた結果,ようやく見つけた解決方法
# 解決策1 command = "hoge ./ruby.rb" system(command) output = $? # systemコマンドの出力は$?に入る # 解決策2 output = '' IO.popen(command) do |io| while io.gets() output << $_ end end
目的は達成されたからいいけれど,``でも簡単な解法があるはず.それが見つからないのが癪で仕方ない(いや,自分が悪いんだけどさ,悔しいじゃない).
Rubyユーザって本当に多いのか?と疑問に思ってしまう.