batsman@tux-chan:/tmp$ cat excep2.rb

begin
    raise "foo"
rescue Exception
    puts "$! is #{$!.inspect}"
    require 'digest/md5'
    puts "$! is #{$!.inspect}"
end
batsman@tux-chan:/tmp$ ruby excep2.rb
$! is #<RuntimeError: foo>
$! is nil

I was bitten by this when doing something like

def somemeth
	require 'digest/md5'
	...
end

def foo
	...
	begin
		...
	rescue Exception
		somemeth
		raise   # I expected this to re-raise the exception, not to
                # create a new one with an empty message
	end
	...
end

Note that
	rescue Exception => e
		somemeth
		raise e
	end
is not a desirable solution because the backtrace info will be modified.
For now I will move the requires but I'd like to know if require's
behaviour w.r.t. $! is deliberate, and if so, the rationale.

I've scanned the first ~ 80000 messages of ruby-talk and couldn't find
any reference to this issue.

-- 
Running Debian GNU/Linux Sid (unstable)
batsman dot geo at yahoo dot com

'Ooohh.. "FreeBSD is faster over loopback, when compared to Linux
over the wire". Film at 11.'
	-- Linus Torvalds