localはグローバル変数の局所化の宣言。
そりゃ、スコープを抜ければ待避させたデータの再利用が可能だし、
入門書では他のサブルーチンからでも参照できるとか書いてるけど
意図的にそういうスクリプト書く奴の気が知れない。
基本はTMTOWTDIだが、一応正しい使い方はlocalでできてmyでできない宣言。
→型グロブやファイルハンドルの宣言、特殊変数の一時書き換えなど。

myはレキシカル変数の宣言。
スコープの外からリファレンスを使って参照することができるが、基本的にはスコープを抜けると消える。
外から参照されている場合もリファレンス自体が消えた時点で消える。
スコープの外に同名の変数が無く、リファレンス等も用いていないなら挙動は同じといって良い。
きっちり書いてるならundefする必要はないと思われ。
undefされた変数をそれ以降に利用する場合とかはその例外。

これでどう?