perl - Perl 变量声明的正确方法

标签 perl variables scope

我有一组 3 或 4 个独立的 Perl 脚本,它们曾经是一个简单管道的一部分,但我现在试图将它们组合成一个脚本以便于使用(目前没有子例程函数)。问题是在不同的脚本中定义了几个同名的变量。我发现的解决方法是为这些变量赋予不同的名称,但它可能会开始变得困惑,而且可能不是正确的做法。 我知道全局变量和局部变量的概念,但我不太明白它们究竟是如何工作的。

有没有处理这类变量的经验法则?您是否知道任何可以阐明可变范围或对此有任何建议的好文档?

谢谢。

已编辑:我已经使用了“使用警告;使用严格;”并用“my”声明变量。这个问题实际上可能与范围 block 的定义以及如何使它们彼此独立......

最佳答案

您可能会因为使用全局 变量(实际上可能存在于包main 中)而陷入麻烦。您应该尽量避免使用全局变量。

为此,您应该熟悉可变范围的含义。尽管有些过时,Coping with Scoping很好地介绍了这个主题。另见 this answer和其他人的问题 How to properly use Global variables in perl . (简短回答:尽可能避免使用它们。)

变量作用域和限制使用全局变量的原则实际上适用于几乎所有编程语言。您应该养成在尽可能接近实际使用它们的地方声明变量的习惯。

最后,为了让自己免于头痛,养成以下习惯:

  • 包括use strict;use warnings;在每个 Perl 源文件的顶部,以及
  • my 声明变量在你的每个 sub 中的(将这些变量的范围限制为 sub )。

(有关此建议的更多信息,请参阅 this PerlMonks article。)

我将这种做法称为“系好安全带的 Perl 编程”。 :-)

关于perl - Perl 变量声明的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20589286/

相关文章:

perl - 在Perl中,创建与程序包同名的子例程是否有害?

perl - 使用 Perl 创建包

ruby - 如何避免类和全局变量

python - 打印变量名称和内容作为调试工具;寻找 emacs/Python 快捷方式

python - 将一对变量分配给 Python 中两个变量的最小值/最大值

javascript - 在 .then() 链中传递 Promise.join 处理程序的结果

python - 在嵌套函数中使用全局名称

perl - 从文件中获取列名

perl - 如何将数组元素数组(不同长度)转换为树/哈希

javascript - 为什么 'this' 突然超出了我的范围?