Perl 5 提供了若干 超级全局变量,它们是真正的全局变量,而不仅仅局限于任何特定的 包。这些超级全局变量有两个缺点。第一,它们是全局变量;任何直接或间接的修改就能影响 到程序的其余部分。第二,它们太过精炼。经验丰富的 Perl 5 程序员早就记住了它们中的一 部分。很少有人能够记全这些变量。而且,它们中也只有几个是常用的。perldoc perlvar
包含这类变量的详尽列表。
要管理这些超级全局变量的全局行为,最佳途径就是避免使用它们。当你必须用到它们时, 请在尽可能小的作用域内使用 local
来约制改动。所 调用 的代码对这些全局变量 做出的修改仍然会影响到你,但你已经降低了在你能力范围 之外 出现令人惊奇的代码 的可能。
English
核心模块为过度使用标点的超级全局变量提供了详细的名称。用如下方式将其 导入名称空间:
随后你就可以在该名称空间作用域内使用记录在 perldoc perlvar
中的详细名称。
大部分现代化的 Perl 5 程序只用到一部分超级全局变量。有部分全局变量只是为一些 你不太可能碰到的特殊情况而存在的。虽说 perldoc perlvar
是这些变量正规文档, 有部分变量还是值得在此提一下。
超距作用(Action at a distance)的罪魁祸首与IO和异常条件有关。使用 Try::Tiny
(exception_caveats)有助于把你和正确异常处理所含狡猾的语义隔开。用 local
局部化并复制 $!
的值可以帮助你避免因 Perl 执行隐式系统调用时的古怪行为。
你可以通过 use
引入 IO::Handle
来执行词法文件句柄(lexical_filehandles)上 的方法而非 IO 相关的超级全局变量。就地 select
一个文件句柄,接着修改 $|
,即是 直接调用词法文件句柄上的 autoflush()
方法。调用特定文件句柄上的 input_line_number()
方法可以得到和 $.
等价的结果。有关其他适用方法的信息请参见 IO::Handle
文档。
Hey! The above document had some coding errors, which are explained below:
- Around line 5:
-
A non-empty Z<>