什么 - >箭头在Perl中做什么?

fan*_* yu 34 perl

我一直->在看代码,我不确定它是什么意思.例如:

@top_links = @{$m->links};
Run Code Online (Sandbox Code Playgroud)

这条线做什么?另外,我在哪里可以阅读它?

Eug*_*ash 37

请参阅perlop中的箭头运算符:

" ->"是一个中缀解引用运算符,就像在C和C++中一样.如果右侧是a [...],{...}(...)下标,则左侧必须分别是对数组,散列或子例程的硬引用或符号引用.(或者从技术上讲,一个能够持有硬引用的位置,如果它是用于赋值的数组或哈希引用.)请参阅perlreftutperlref.

否则,右侧是方法名称或包含方法名称或子例程引用的简单标量变量,左侧必须是对象(有福的引用)或类名(即包名) .见perlobj.

  • 可能会提到它类似于许多其他语言中的点运算符,如Python,Java,Javascript等. (9认同)
  • 倒数第二行有点误导.如果箭头右侧的标量是代码引用,那么左侧的内容根本不重要.使用`my $ say_array = sub {print"@ {$ _ [0]} \n"};`然后你可以编写像`[1,2,3] - > $ say_array;`这样打印`1 2 3的行` (7认同)
  • @Eric Strom:对我来说看起来像个错误 (2认同)

dax*_*xim 13

一般来说,->提示取消引用.此语法来自C.

在您的示例中,它表示方法调用:links来自对象实例的调用方法$m.这在现代Perl中的Objects中对此进行了解释.饮片perlsub,perlfaq7,perlobj,perltoot提供细节.

对于一般的参考,搜索Stack Overflow ; 这是一个反复出现的话题.


flo*_*w2k 7

Perl 箭头运算符还有另一个用途:

Class?>method 调用包Class中的子程序方法

尽管它与您的代码示例完全不同。仅包含它是为了标题中问题的完整性。


Pau*_*xon 5

外部@{}是一个取消引用 - 这意味着$m->links是对数组的引用,因此该运算符将其引用为直接引用该数组,然后将其复制到@top_links

' Camel Book ' 的第 8 章是了解参考资料或Perl 文档的perlref部分的好地方。

->箭头操作符是一个对象解引用,在这种情况下提取所述links的的构件$m对象。同样,Camel Book 的后续章节详细介绍了 Perl 的面向对象支持。另请参阅Perl 文档的perlobj部分。