11 package C;
12 $_ = 5;
13 print "$_\n$C::_\n$::_\n";
Run Code Online (Sandbox Code Playgroud)
输出:
5
5
Run Code Online (Sandbox Code Playgroud)
我们知道$_Perl中的一个超全局变量,但为什么第一次赋值给这个变量会导致同时赋值$::_?
UPDATE
package C;
$_ = 5;
print "$_\n$C::_\n$::_\n";
package main;
print "####in main::\n";
$_ = 2;
print "$_\n$::_\n";
package A;
our $_ = 1;
$_ = 4;
print "####in A::\n";
print "$_\n$::_\n$A::_\n";
print "####in B::\n";
package B;
$_ = 3;
print "| $_ | \n
|$::_ | \n
|$B::_\n";
Run Code Online (Sandbox Code Playgroud)
在最后print,你可以看到,$_并且$::_是不同的.
| 3 |
|2 |
|
Run Code Online (Sandbox Code Playgroud)
$_保存在包装中main.此外,如果省略包名,main则假定包.也就是说,$::_等同于$main::_(以及$main'_).
关于你的更新:$_应该是$main::_.但之后our,$_现在正在关注$A::_.这似乎是Perl 5.8.8中的一个错误.