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?
Я понял, как это сделать.
$chan = $server->channel_find('#channel');
foreach my $nick ($chan->nicks()) {
$nickname = $nick->{nick};
}