eval问题请教

请问用eval执行一段字符串,如何捕获抛出的语法错误异常
如 eval("aa = bb")
会抛出语法错误异常,如何在程序里捕获到?
试着用了
begin
eval("aa = bb")
rescue => e
puts e.to_s
end
貌似不行,有哪位高手知道?谢谢

[code="ruby"]begin
eval("aa = bb")
rescue
puts $!
end
#or this
begin
eval("cc = dd")
rescue Exception => e
puts e
end[/code]

这是因为aa = bb引发的异常是NameError,而这不是一个StandardError(或子类),所以省略rescue后面的类型时,不会捕捉到这个异常。注意一下rescue语句的规定。
[code="ruby"]begin
eval 'aa = bb'
rescue NameError => e
puts e
end[/code]
这样指定好类型就行。