Irssi просматривает пользователей на канале

Я пытаюсь собрать воедино другие сценарии, которые я видел, чтобы можно было просматривать список пользователей на канале.

Вот что я придумала

my $channel = @_;
foreach my $nick ($channel->nicks()) {
    $server->command("msg $chatchannel $nick->{nick}");
}

Но все, что я получаю от этого,

Невозможно вызвать метод "nicks" без ссылки на пакет или объект в строке /root/.irssi/scripts/test.pl 64.

что относится к

$channel->nicks()

Я иду по этому поводу неправильно? или это должно работать? Я видел много других скриптов, использующих $channel->nicks(), так что я знаю, что это должно работать?

редактировать

Я должен также упомянуть, что это уже определено далее в коде

my ($server, $msg, $target, $channel, $chatnet) = @_;

Но когда я пробую это с этой переменной $ channel, я получаю

Не удается найти метод объекта "nicks" через пакет "mattigins@mattigins.tmi.twitch.tv" (возможно, вы забыли загрузить "mattigins@mattigins.tmi.twitch.tv"?) В ​​/root/.irssi/scripts/ строка test.pl 64.

2 ответа

С левой стороны (LHS) my $channel = @_; это скаляр, он налагает скалярный контекст на @_ массив. Это означает, что длина массива присваивается $channel, Вы хотите назначить с my ($channel) = @_; так что LHS находится в контексте списка и что первый элемент в @_ массив присваивается вашему скаляру.

Ref:

В чем разница между скалярным и списочным контекстами в Perl?

Скалярный и список контекста в Perl

Я понял, как это сделать.

$chan = $server->channel_find('#channel');
foreach my $nick ($chan->nicks()) {
    $nickname = $nick->{nick};
}
Другие вопросы по тегам