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.