In deep binding, lexical variables mentioned in anonymous subroutines are
the same ones that were in scope when the subroutine was created. In
shallow binding, they are whichever variables with the same names happen to
be in scope when the subroutine is called. Perl always uses deep binding of
lexical variables (ie, those created with my).
However,
dynamic variables (aka global, local, or package variables) are effectively
shallowly bound. Consider this just one more reason not to use them. See
the answer to What is a closure?.