in reply to ARGV as a sub name?
The special variables are "super global"*, accessible from any namespace without qualification. This is done by making the name of the variable "super global". That means that if $_ is super global, so is array @_, hash %_, sub &_, etc.
"ARGV" is one of those names. No matter what namespace is current, sub ARGV { } will define &main::ARGV, and ARGV() will call &main::ARGV.
You can get around that by specifying which package's ARGV you want.
{ package Foo; sub ARGV { print "1\n" } sub Foo::ARGV { print "2\n" } } { package Bar; ARGV(); # 1 Foo::ARGV(); # 2 Foo->ARGV(); # 2 }
Replace "ARGV" with "_" and you'll get the same results.
* — Not a technical term :)
|
|---|