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

Fis*_*ury 86 perl scope declaration

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

例如,它用于获取此帖子中数组的长度: 在Perl中查找数组的大小

但手册说:

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

它做什么以及如何使用?

ike*_*ami 133

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

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


相关阅读:为何使用use strict;use warnings;

  • 最后一个解释*为什么*的答案. (9认同)

Igo*_*bin 26

快速摘要: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
Run Code Online (Sandbox Code Playgroud)

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

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

更新

关于区别ourmy请看

(感谢ThisSuitIsBlackNot).

  • 当您在代码示例中不使用“local”时,为什么还要提及它呢? (3认同)
  • @rdodev我认为你的意思是'我们的':http://stackoverflow.com/questions/845060/what-is-the-difference-between-my-and-our-in-perl (2认同)
  • 我认为这个答案需要一些调整。您有一个代码示例演示了 `my` 的使用,但接着是一个谈论 `local` 的句子,就好像你刚刚演示了 `local` 的用法一样,尽管 `local` 没有在此的任何地方演示回答。我认为你有点错误地引用了 PerlMonks 上的源代码,它有两个代码示例。关于“local”的句子描述的是另一个,而不是您在此处转录的那个。 (2认同)
  • 嗯,是。正如[此评论](/sf/ask/1462272661/?noredirect=1#comment75064909_20889656)中提到的,代码示例您给出的内容没有显示“local”的使用。但是,您随后解释了“local”的范围,但尚未得到证明。问题是您从 perlmonks 页面复制了错误的代码片段。这是相当误导的。 (2认同)

cjm*_*cjm 6

通过 my() 的私有变量my.

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