Perl-中的词法变量和包变量

参考

根据作用域的不同来区分,Perl 有两种变量类型:

  • 词法变量 (Lexical Variable), 具有 词法作用域, 只在当前词法作用域内可见
  • 包变量 (Package Variable), 全局变量,在任何位置可见

三种创建变量的方式:

  • my – 创建一个词法变量
  • our – 创建一个词法变量,但实际上是包变量的别名,或者说是伪装成词法变量的包变量
  • 直接使用 – 不声明,创建一个包变量.

词法作用域的理解

词法作用域用来限制局部变量的名字生存范围.

一个 block 就是一个词法作用域.

对 our 的理解

在一个包中,只有当一个变量用 our 声明,才能用 $PKGNAME::VAR 在其他包中访问.

如:

1
2
3
4
5
package A;
my $foo = 1;

package B;
print $A::foo;

将会报错.

而写成:

1
2
3
4
5
package A;
our $foo = 1;

package B;
print $A::foo;

则可以访问.

因此,our 这个关键词用在,想要使一个变量可以在多个包中使用时.

local

local 并不创建一个新变量,而是对已有的包变量临时赋予一个值,在推出 scope 后将原来的值还回去.

因此,用 local 声明新变量会报错.

总结

基本用 my, 需要用全局包时用 our.

特定时用 localstate.


Perl-中的词法变量和包变量
http://example.com/2022/12/11/Perl-中的词法变量和包变量/
作者
Jie
发布于
2022年12月11日
许可协议