エラー

http://ns.wisdom.co.jp/~ono/programming/ruby/intro/intro_03.htm

$@ 例外が発生した時のバックトレース配列。

っていう解説があったので、エラーが出たら見てやろうと思ってましたが、よくよく考えてみれば、チュートリアルのは、'やendが足りないとかそういう文法上のエラーなのでパーサーが出すエラーはtry〜catchみたいのじゃ捕まえられないんじゃないの?と思ったわけです。でも気になるので、rubyのリファレンスで例外のところを見てみると・・・
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C0%A9%B8%E6%B9%BD%C2%A4#a.ce.e3.b3.b0.bd.e8.cd.fd
なんと、例外としてSyntaxErrorを発生させている例が書いてあるではないですか。

っていうわけで早速調べる。
begin〜resque〜ensure〜endがJavaで言うtry〜catch〜finallyに当たるらしい。で、組み込み変数 $! で例外オブジェクトが取得できるらしい。

begin
  if true
    puts '後ろのシングルクォーテーションがないのさ'
rescue
  p $!
end

ってやってみたら

test.rb:2: unterminated string meets end of file
test.rb:2: syntax error

ってでた。そらそうだね。文末まで文字列として解釈しようとしてるのね。

代わりにこう書いてみた。

begin
  if true
    puts '今度はifに対応するendがないのさ'
rescue
  p $!
end

するってーと今度は、

test.rb:4: syntax error
test.rb:6: syntax error

って出た。p $!をコメントアウトすると

test.rb:4: syntax error

としか出ない。成功じゃん。インタプリタだからsyntax errorも例外として拾えるんだね。