В объектно-ориентированном Perl invocant метода (объект, для которого был вызван метод, либо класс, либо экземпляр класса) передается в подпрограмму в качестве первого параметра.
Параметры подпрограмм находятся в специальном массиве @_
. shift
удаляет первый элемент массива и возвращает его. Если вы не укажете явный аргумент для shift
, по умолчанию он будет работать на @_
.
Обычный шаблон для ОО-методов - делать такие вещи, как
# foo method
sub foo {
my $self = shift;
# do stuff to $self
$self->othermethod;
}
То, что здесь происходит, заключается в том, что они просто используют ярлык, чтобы избежать создания переменной $self
, и вызывают метод state
для инвоканта, который был возвращен непосредственно из shift
. Таким образом, ваш метод эквивалентен:
sub shared {
my $self = shift;
$self->state( broadcast => @_ );
}