=over

=item my VARLIST
X<my>

=item my TYPE VARLIST

=item my VARLIST : ATTRS

=item my TYPE VARLIST : ATTRS

A L<C<my>|/my VARLIST> declares the listed variables to be local
(lexically) to the enclosing block, file, or L<C<eval>|/eval EXPR>.  If
more than one variable is listed, the list must be placed in
parentheses.

Note that with a parenthesised list, L<C<undef>|/undef EXPR> can be used
as a dummy placeholder, for example to skip assignment of initial
values:

    my ( undef, $min, $hour ) = localtime;

Redeclaring a variable in the same scope or statement will "shadow" the
previous declaration, creating a new instance and preventing access to
the previous one. This is usually undesired and, if warnings are enabled,
will result in a warning in the C<shadow> category.

The exact semantics and interface of TYPE and ATTRS are still
evolving.  TYPE may be a bareword, a constant declared
with L<C<use constant>|constant>, or L<C<__PACKAGE__>|/__PACKAGE__>.  It
is
currently bound to the use of the L<fields> pragma,
and attributes are handled using the L<attributes> pragma, or starting
from Perl 5.8.0 also via the L<Attribute::Handlers> module.  See
L<perlsub/"Private Variables via my()"> for details.

=back