理解my和local之间的差异

1.全局变量

在Perl里面,所有的变量,子程序和其他可以被命名的实体默认都有包作用域(或称为全局作用域). 也就是说,他们存在于当前包的符号表中。

花括号,子程序或是文件,是不会创建local变量的。

当然,Perl 确实支持本地变量,提供2种,一个是my,一个是local

2.my 变量词法作用域(编译时)

Perl 的my操作符用于创建词法作用域变量。 通过my创建的变量,存活于声明开始的地方,直到闭合作用域结尾。

my变量并不存在于符号表中。

我们总能通过限定名称访问包变量值。限定名称(包含::符号)总是指向符号表中的变量。

3.local的运行时作用域

local 是运行时作用域机制。它会将参数的值保存在一个运行时栈中,当运行线程离开作用域时,原先作用域外暂存的变量会被恢复。

my创建了 不同的变量,而local只是将已存在的变量值暂时保存起来罢了。

4.何时该用my

通常情况下,我们应该用my而不是local。理由之一是my比local快。 而且my 也比较容易理解。

另一个原因是创建的词法变量是Perl闭包的实现基础。

5.何时该用local

用local的理由之一是,很多perl4风格的代码还在使用。

另外大部分$开头的变量,或者其他Perl特别对待的变量,只能用local来进行本地化,而用my试图对特殊变量进行本地化是错误的。

6.local 和my 对列表操作

local 和my的语法相同,无论是单个变量,还是数组或者散列,都可以用这两种类型声明。

posted @ 2013-04-10 09:20  新闻官  阅读(329)  评论(0编辑  收藏  举报