Actually, it is a feature of how Perl's global destruction is not done in an orderly manner in order to save time. Whether or not you get the error depends on some rather random things.
I don't see how not using -w would help as trying to call a method on an undefined value does not require -w in order to trigger. Perhaps you are just getting lucky.
You don't have to upgrade Perl to solve this problem. Simply upgrade Win32::TieRegistry. If you go to http://search.cpan.org/ and search for "TieRegistry", you'll find version 0.24. Click on the very first link and then click on the Changes file to see:
(Well, when I did that I got an error which I'm hoping is a temporary problem with the web site.)Revision history for Perl extension Win32::TieRegistry. 0.24 2001-02-06 19:00 - Silenced error that could appear "at random" during "cleanup": (Can't call method "FETCH" on an undefined value)
In any case, I was able to download the module. Then unzip the file and install it like any CPAN module (or, if you don't have a version of "make", run the included Install.bat). The latest version may also be available in PPM form from some repository (I don't keep track much since I don't seem to have the ability to affect what gets made available).
As for the error being harmless, you are mostly correct. The only thing related to that error that is a problem is fairly minor, especially considering that it only affects a feature that is rarely used. From the Bugs section of manual:
Current implementations of Perl's "global destruction" phase can cause objects returned by Load() to be destroyed while keys within the hive are still open, if the objects still exist when the script starts to exit. When this happens, the automatic UnLoad() will report a failure and the hive will remain loaded in the Registry.- tye (but my friends call me "Tye")