Thanks for your replies. I guess I have to put the use warnings; into both the calling script and the called utilities library, which is what I have now done.
I was hoping the use warnings; in the calling script would have been enough to ensure all called libraries had the same warnings behaviour when used by that script. That way the same library could be used by different scripts with different warnings behaviour. Not sure if they had other concerns in mind when they decided to make it like this, but I'm happy that I now finally know what's going on and how to make it work for me.
Thank you for your assistance!
Comment on Re^5: Warnings not working on one machine
If you run this you will only see one occurrence of the warning Use of uninitialized value $Foo::baz in print at /tmp/warnshow.pl line 9. which is caused by the first call to Foo::bar (). The second call does not generate the warning. HTH.