use strict
を使用していますが、サブルーチン内で突然宣言したグローバル変数にエラーを出してくれません。
仕様なのでしょうか。