Perl-中的词法变量和包变量
根据作用域的不同来区分,Perl 有两种变量类型:
- 词法变量 (Lexical Variable), 具有 词法作用域, 只在当前词法作用域内可见
- 包变量 (Package Variable), 全局变量,在任何位置可见
三种创建变量的方式:
my
– 创建一个词法变量our
– 创建一个词法变量,但实际上是包变量的别名,或者说是伪装成词法变量的包变量- 直接使用 – 不声明,创建一个包变量.
词法作用域的理解
词法作用域用来限制局部变量的名字生存范围.
一个 block 就是一个词法作用域.
对 our 的理解
在一个包中,只有当一个变量用 our
声明,才能用 $PKGNAME::VAR
在其他包中访问.
如:
1 |
|
将会报错.
而写成:
1 |
|
则可以访问.
因此,our
这个关键词用在,想要使一个变量可以在多个包中使用时.
local
local
并不创建一个新变量,而是对已有的包变量临时赋予一个值,在推出 scope 后将原来的值还回去.
因此,用 local
声明新变量会报错.
总结
基本用 my
, 需要用全局包时用 our
.
特定时用 local
和 state
.
Perl-中的词法变量和包变量
http://example.com/2022/12/11/Perl-中的词法变量和包变量/