In a nutshell :my does not declare a package variable. use vars does. There's a wealth of information on this topic in the Tutorials section of the site (subsection "variables"); I'll plug my Variable Scoping in Perl: the basics and Dominus' Coping With Scoping specifically.
update adjusted the link to CwS to point directly to it.
If not P, what? Q maybe?