Я продолжаю видеть ->
в коде, и я не совсем уверен, что это значит. Например:
@top_links = @{$m->links};
Что делает эта линия? Кроме того, где я могу, возможно, прочитать об этом?
Я продолжаю видеть ->
в коде, и я не совсем уверен, что это значит. Например:
@top_links = @{$m->links};
Что делает эта линия? Кроме того, где я могу, возможно, прочитать об этом?
См. Оператор стрелки в perlop:
"
->
" - это оператор разметки infix, как и в C и С++. Если правая сторона является либо индексом[...]
,{...}
, либо(...)
, то левая сторона должна быть либо жесткой, либо символической ссылкой на массив, хеш или подпрограмму соответственно. (Или технически говоря, местоположение, способное удерживать твердую ссылку, если для присвоения используется массив или хеш-ссылка). См. perlreftut и perlref.В противном случае правая сторона - это имя метода или простая скалярная переменная, содержащая либо имя метода, либо ссылку на подпрограмму, а левая сторона должна быть либо объектом (блаженной ссылкой), либо именем класса (то есть имя пакета). См. perlobj.
В общем случае ->
указывает на разыменование. Этот синтаксис исходит от C.
В вашем примере это означает вызов метода: метод вызова links
из экземпляра объекта в $m
. Это объясняется в главе "Объекты" в Modern Perl. Куски perlsub, perlfaq7, perlobj, perltoot предоставить информацию,
Для ссылок в целом поиск; это повторяющаяся тема.
Внешняя часть @{}
является разыменованием - это означает, что $m->links
является ссылкой на массив, поэтому этот оператор упускает из виду его непосредственно ссылаясь на массив, который затем копируется в @top_links
Глава 8 " Camel Book - хорошее место, чтобы узнать о ссылках или perlref в документации Perl.
Оператор стрелки ->
- это разыменование объекта, в этом случае выборка элемента links
объекта $m
. Аналогичным образом, в последующих главах книги Camel подробно описывается объектно-ориентированная поддержка Perl. См. Раздел perlobj документации Perl.
Оператор стрелки Perl имеет одно другое применение:
Метод Class- > вызывает метод подпрограммы в пакете Class
хотя он полностью отличается от вашего кода. Включая его только для полноты вопроса в названии.