perl中的my和our

                      our 和 my 一样,都是对变量的声明, 
不过 our 声明的是包全局变量, 
而 my 声明的是词法变量。 


不过,经过 our 声明的变量,它会变得像一个词法变量一样, 
其实这也是 our 存在的目的:用来欺骗 strict pragma,使 strict 以为它是一个词法变量,其实却不是。 


有一个简单的办法可以理解 our: 
1,你就把 our 声明的变量和 my 声明的当成一样。 
2,记住 our 和 my 的区别:our 声明的是一个包全局变量,因此在符号表中存储(可以通过全限定在任何地方访问),而 my 声明的是一个真正的词法变量,只能在闭合块中访问。




my 和 our 的区别: 


use strict; 


my $var; 
$var = 1; 

    my $var; 
    $var = 2; 
    print $var, "\n"; 

print $var, "\n"; 


output 






 
use strict; 


our $var; 
$var = 1; 

    our $var; 
    $var = 2; 
    print $var, "\n"; 

print $var, "\n"; 


output 






our (或者什么修饰都没有)声明的是“包全局变量”,它的是“依附”在“包”上面的,它的存储位置是“包符号表”, 
my 声明的是“词法变量”,它是“依附”在“代码块”上的,它的存储位置是“代码块”的“变量标签薄”,代码块是不不可以访问的,所以词法变量同样也不可以访问。 
但是包全局变量就不同了,用全限定就可以访问。

你可能感兴趣的:(perl,存储)