: method
- это атрибут функции описание. Подпрограмма, помеченная таким образом, не вызовет предупреждение «Неоднозначный вызов разрешен как CORE ::% s».
Из комментария ysth :
Предупреждение появляется, когда подпрограмма имеет то же имя, что и встроенная функция, и она вызывается без &, а не как вызов метода; Perl использует встроенный вместо этого, но выдает предупреждение. Метод: успокаивает предупреждение, потому что он ясно указывает, что подпрограмма никогда не предназначалась для вызова в качестве не-метода в любом случае.
Обновление
Этот код просто вызывает метод bar
, когда вызывается foo
:
sub foo : method { ## Mark function as method
shift->bar(@_) ## Pass all parameters to bar method of same object
}
Подробнее:
: method
- Указывает, что указанная подпрограмма является методом. Подпрограмма, помеченная таким образом, не вызовет предупреждение «Неоднозначный вызов разрешен как CORE ::% s».
shift
- получает первый параметр из @_
, который будет $self
->bar(@_)
- вызвать метод того же класса bar
со всеми другими параметрами
Вы можете прочитать это как:
sub foo : method {
my ($self) = shift @_;
return $self->bar(@_);
}