我应该如何在Perl中使用“my”关键字?

时间:2014-01-02 18:43:45

标签: perl scope declaration

我在示例Perl脚本在线上看到变量名前面的“my”关键字,但我不知道它意味着什么。我尝试在线阅读手册页和其他网站,但鉴于我看到它与手册之间的区别,我很难辨别它是什么。

例如,它用于获取此帖子中数组的长度: Find size of an array in Perl

但是手册说:

  

我将列出的变量声明为本地(词法)   封闭块,文件或eval。如果列出了多个值,则   列表必须放在括号中。

它做什么以及如何使用?

3 个答案:

答案 0 :(得分:131)

my限制变量的scope。变量的范围是可以看到的。将变量的范围缩小到需要变量的位置是良好编程的基本方面。它使代码更具可读性,更不容易出错,并带来一系列派生的好处。

如果不使用my声明变量,则会创建一个全局变量。这是应该避免的。使用use strict;告诉Perl您希望阻止隐式创建全局变量,这就是您应该始终在程序中使用use strict;(和use warnings;)的原因。


相关阅读:Why use use strict; and use warnings;?

答案 1 :(得分:25)

快速摘要:my创建一个新变量,local暂时修改变量的值

在下面的示例中,$ :: a在“全局”命名空间中引用$ a。

$a = 3.14159;
{
  my $a = 3;
  print "In block, \$a = $a\n";
  print "In block, \$::a = $::a\n";
}
print "Outside block, \$a = $a\n";
print "Outside block, \$::a = $::a\n";

# This outputs
In block, $a = 3
In block, $::a = 3.14159
Outside block, $a = 3.14159
Outside block, $::a = 3.14159

即,local暂时更改变量的值,但仅在其存在的范围内。

来源:http://www.perlmonks.org/?node_id=94007

<强>更新

关于ourmy之间的差异,请参阅

(感谢 ThisSuitIsBlackNot )。

答案 2 :(得分:4)

Private Variables via my()my的主要文档。

在您提到的数组大小示例中,它不用于查找数组的大小。它用于创建一个新变量来保存数组的大小。