文字列をマッチさせて数値に変換する時に

'10'.match(/(100)/){ $1 } # => nil

なので、to_iをつければ0を返してくるかと思ったのですが、変わらずnilを返してきます。

'10'.match(/(100)/){ $1.to_i } # => nil

不思議だったのでクラス名を取ろうと思ったのですが

'10'.match(/(100)/){ p $1.class } # => nil

でも何も返ってきません。
正規表現でマッチした値を返す $1 などの特殊変数はどう規定されていて
どこのドキュメントに振る舞いが書かれているのでしょうか?