Your inconsistency might be because of the tie method not updating the 'real' %ENV. Consider using Env::C (or at least read its doc to see the issues). I agree with others though: why would you want to do this?
Comment on Re: Case insensitive keys in global %ENV