日本コントロールシステム(株)の近永と申します。

オンラインマニュアルの例によると Kernel#trap および Signal.trap は
ハンドラに文字列(スクリプト片)を指定できるとなっていますが、
やってみるとうまく動いていないようです。
# マニュアル本文(?)には、スクリプト片を文字列として渡していいと
# はっきりとは書いてないようですけれど...

1.8 と 1.9 でそれぞれ異なるエラー内容になります。
なお、いろいろな環境で試したのですが 1.8.0 では動いていて、
1.8.1 から動かなくなったようです。

$ cat traptest.rb
Signal.trap(:INT, "p true")
loop do
  sleep
end

$ ruby-1.8.6 -v traptest.rb
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux]
true           #   <= Ctrl-C
traptest.rb:4: unexpected return

$ ~/env/ruby-head/bin/ruby -v traptest.rb
ruby 1.9.0 (2007-01-09 patchlevel 0) [i686-linux]
# <- Ctrl-C
traptest.rb:4:in `sleep': wrong argument type String (expected Data) (TypeError)        from traptest.rb:4:in `block in <main>'
        from traptest.rb:3:in `loop'
        from traptest.rb:3:in `<main>'

$ ruby1.8 -v hoge.rb
ruby 1.8.0 (2003-08-10) [i386-linux]
true           #   <= Ctrl-C
true           #   <= Ctrl-C

以上、報告だけですみません。

-- 
日本コントロールシステム(株)
近永 智之 <chikanag / nippon-control-system.co.jp>