読者です 読者をやめる 読者になる 読者になる

eval

 プログラムだと実は重要度の高いevalを試すなど。文字列を式として評価する凄いメソッドだけど、使い方を誤るとすぐに?セキュリティーホールになる恐ろしい物だったりします。

#!/usr/bin/ruby
hoge = 0
ev = "hoge = 1"
eval(ev)
puts hoge #=> 1

 まずは変数に代入するだけとか。

#!/usr/bin/ruby
hoge = 0
ev = "hoge = 1;puts 'here'"
eval(ev)
puts hoge
#=> here
#=> 1

 こんな感じに意味のあるコマンドを挿入しても実行できてしまうのがevalの凄いところであり、恐ろしいところ。


 でもってこんな物を書いてみたり。

#!/usr/bin/ruby

def line
  printf ">> "
  gets
end

loop do
  begin
    puts eval(line)
  rescue => e
    p e
    retry
  end
end

 irbの代用できそうで出来ない物です...。
`date`
とかやるとちゃんと時間が表示されたりで実は便利かも知れませんね。