Well, that's not entirely true; it does that only indirectly. $@ contains the backtrace for the last exception raised. It is useful for debugging particularly, since if you do something like this:
begin
# Code that may throw an exception
# Code that may throw an exception
# Code that may throw an exception
# Code that may throw an exception
# Code that may throw an exception
rescue
p $@
end
It will print out where the error has occured.
When you first start the program, $@ will be nil, which is why "unless $@" will not prevent the initial aliases when first "loading" the scripts. The reason "unless $@" works to avoid stack errors in hidden scripts is because when F12 is pressed, an exception occurs in the update method of the Graphics module, which means that the second time it is "loading" the scripts, $@ will have the backtrace for that exception and therefore will not be nil, and so the "unless $@" will avoid re-aliasing the methods.
Personally, I think it is bad form to use this, and I prefer to directly check if the aliased method is already defined with a self.method_defined? check.
Anyway, thanks for the bug report.
I have decided to stop being lazy and have released v. 3.0b, which fixes both F12-related errors. That is all it does so there is no need to download the new version if that is irrelevant to anyone or if they've fixed it themselves. Hopefully that's the end of the bugs.