eklerniです。 Kernel のメソッド trace_var についての質問です。 現在のマニュアルを見てみると、 > trace_var(varname, hook) > trace_var(varname) {|newval| .... } > > グローバル変数 varname への代入のフックを登録します。 varname は文字列 か Symbol で指定します。 > > ここでの「グローバル変数」は、特殊変数も含めた`$' で始まる変数のことです。 > > この呼び出し以降、varname で指定したグローバル変数に代入が起こると文字 列または Proc オブジェクト hook が評価されます。フックが Proc オブジェク トならブロック引数に代入された値が渡されます。またフックは複数登録できます。 (略) となっていて、第二引数には文字列を指定できるようです、ただ、挙動を調べて みると $v = nil trace_var(:$v, "puts 44") $v = 'str' #=> $v="str" #=> 44 # C:/.../:3: unexpected return みたいなエラーになります。使い方が間違ってるのでしょうか?とりあえず $v = nil trace_var(:$v, "puts 44".taint) $v = 'str' #=> $v="str" #=> C:/.../:2:in `trace_var': Insecure: tainted variable trace (SecurityError) なことはわかりました。 それとこの文字列形式の存在意義なのですが、 * 文字列で指定する方法でブロックよりもうれしいことがあるのか、それとも 単に互換性のために残っているのか。 * 文字列を積極的に用いる理由がないなら、リファレンスマニュアルではプロッ ク(またはブロック)形式の記述を推奨していいか? てなことを考えています。どうでしょうか? 環境は ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] です。