This certainly is covered in Damian Conway's PBP:
"5.1. Lexical Variables
Avoid using non-lexical variables."
I'm not referring to lexical variables (
my), as you pointed out that part is covered by the best practices. I was referring to writing a single script from the top to the bottom with out localizing all variables. Remember that my only declares the variable for the life time of the current block. If the variable is not declared in a block then the file is the block scope, making the variable global. This is no matter if the variable is written in all caps or in lower case
I think that we have learned that declaring all variables as global is a bad programming practice. We are lucky with Perl that we don't need to do so. We can even declare our variables just before we need to. Other languages, C for instance, are not that lucky and are trying to address this in some way or another (C99 is doing it, a bit too late).
I like wrapping all my code inside a function, it limits the scope of the variables and doesn't allow me to cut corners. If I need something global it has to be pulled out manually from the block. Moving bits of code from the main function to another function is easier because if I forget a variable
use strict; will spot it right away. Without this refactoring code that omits a variable will pass unseen as all variables are global.