my
my vars
Declares one or more private variables to exist only
within the innermost enclosing block, subroutine, eval
, or file. The new value is
initially undef
for scalars and
( )
for arrays and hashes. If
more than one variable is listed, the list must be placed in
parentheses, because the operator binds more tightly than a comma.
Only simple scalars or complete arrays and hashes may be declared
this way. The variable name may not be package-qualified, because
package variables are all global, and private variables are not
related to any package.
Unlike local
, this
operator has nothing to do with global variables, other than
hiding any other variable of the same name from view within its
scope. (A global variable can always be accessed through its
package-qualified form or a symbolic reference, however.) A
private variable is not visible until the statement after its
declaration. Subroutines called from within the scope of such a
private variable cannot see the private variable unless the
subroutine is also textually declared within the scope of the
variable.
3.17.76.175