27

我知道它my用于声明块或文件的本地变量。我一直认为这my是 Perl 中的一个关键字。但我只是被告知它实际上是一个函数。其中一个证明是perldoc放在my“函数”部分下,请参阅http://perldoc.perl.org/functions/my.html

函数如何完成声明局部变量的工作?

4

2 回答 2

16

my不是函数,它只是与函数(在 perl 文档中)聚集在一起,因为它像函数一样工作。

如果你看perldoc perlfunc,据说,

以下是按类别排列的 Perl 函数(包括看起来像函数的东西,如一些关键字和命名运算符)...

然后稍微低于那个

与作用域相关的关键字
caller, import, local, my, our, package, state,use

具体来说,请注意这里使用了“关键字”这个词而不是“功能”</p>

这意味着您会在Perl 函数 AZ下找到一些非函数(例如关键字)

另一种说法是:如果某些东西列在 perldoc 的“函数”下,它不一定是函数——它可以是关键字或命名运算符,其作用类似于函数。

于 2013-06-28T07:35:56.550 回答
15

是的,根据 Perl 的(非常独特的)定义,my是一个函数。perlfunc的开头段落定义了“函数”:

本节中的函数可以用作表达式中的项。它们分为两大类:列表运算符和命名一元运算符。

my是一个命名运算符。但它有两个特别之处:

  • 除了表现得像一个函数(分配一个新变量并返回该变量)之外,它还具有编译时效果。
  • my ...是一元运算符,但在使用括号时它可以接受多个参数。

另一方面,如果你被问到是否my是 C 定义的函数,那么不是。my不是 C 函数。print, open,等也不是chr。 perlfunc 中的所有内容都是运算符;它们都不是函数。


最后,printopenchr更接近人对函数的概念my。更准确地说,很少有人会认为my是一个函数。与 perfunc 对功能的定义相匹配,它更多的是一种技术性,而不是任何有意义的东西。


也可以看看:

于 2013-06-28T13:45:06.910 回答