A "local" modifies its listed variables to be "local" to the enclosing block, "eval", or "do FILE"--and to any subroutine called from within that block. A "local" just gives temporary values to global (meaning package) variables. It does not create a local variable. This is known as dynamic scoping.