perl变量作用域总结
包变量总是全局的。它们有一个名字和一个包限定词。可以忽略包限定词,这样perl会使用默认的包,默认包可由package申明设定。对私有变量,请使用my。不要使用local,它已过时。
避免使用全局变量,因为它难以确保程序的2部分不会错误的使用对方的变量。
为了避免意外使用全局变量,请在程序里使用use strict 'vars'。它会检查并确保所有的变量要么是申明为私有的,要么明确使用了包限定词,要么明确使用use vars来申明。
补充
perl 5.6.0介绍了一个新的our(...)申明。它的语法与my()相同,它是use vars的代替品。
如果不深究细节,our()就类似于use vars;它的唯一影响是申明变量,以便它们免除strict 'vars'的检查。然而相对于use vars,它可能有2个优势:语法不那么怪异,影响是词法作用域。也就是说,它让stict检查失效的范围仅仅在当前块之内:
use strict 'vars'; { our($x); $x = 1; # 这里使用全局变量$x没问题 } $x = 2; # 这里使用$x通常引起编译时错误
所以使用use vars '$x'申明时,可以在任何地方使用全局变量$x。our($x)仅仅允许在程序的某些块里申明全局变量$x,假如意外的在其他地方使用它,仍会导致错误。 |