class SymbolException < Exception
 attr_reader :sym
 def initialize(sym)
  @sym = sym
 end
end

class Symbol
 alias old_match ===
 def ===(obj)
  return old_match(obj) unless SymbolException === obj
  obj.sym == self
 end
end

def raise(*args)
 Kernel.raise *args unless args.length == 1 && Symbol === args[0]
 raise SymbolException.new(args[0])
end



begin
 raise :hoge
rescue :fuga
 p "fuga"
rescue :hoge
 p "hoge"
end

こんなの実装できるとかRuby変態だろ…