Similarly, I've started noticing issues with the common practice of doing local $_. In some situations, that's not enough to prevent damage to the caller. Using local *_ fixes those problems. For example, consider the following function:

STORE "John \"Foo\" Bar"
FETCH
STORE
FETCH
Use of uninitialized value in concatenation (.) or string at 561931.pl+ line 18.
STORE
FETCH
Use of uninitialized value in substitution (s///) at 561931.pl line 6.
FETCH
Use of uninitialized value in substitution (s///) at 561931.pl line 7.
FETCH
Use of uninitialized value in substitution (s///) at 561931.pl line 8.
FETCH
STORE
Use of uninitialized value in print at 561931.pl line 25.