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 2 1 use strict; our $var; $var = 1; { our $var; $var = 2; print $var,"\n"; output 2 2 our (或者什么修饰都没有)声明的是“包全局变量”,它的是“依附”在“包”上面的,它的存储位置是“包符号表”, my 声明的是“词法变量”,它是“依附”在“代码块”上的,它的存储位置是“代码块”的“变量标签薄”,代码块是不不可以访问的,所以词法变量同样也不可以访问。 但是包全局变量就不同了,用全限定就可以访问。