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] です。