Irssi зацикливается на пользователях в канале

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

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

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

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

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

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

$channel->nicks()

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

Изменить

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

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

Но когда я пытаюсь использовать эту переменную $channel, я получаю

Не удается найти метод объекта «ник» через пакет «[email protected]» (возможно, вы забыли загрузить «[email protected]»?) в /root/.irssi/scripts/ test.pl строка 64.


person Mattigins    schedule 16.02.2015    source источник
comment
Что находится в $_? Где вы его берете? Очевидно, это не экземпляр объекта Channel, как вы ожидаете.   -  person nobody    schedule 16.02.2015
comment
Извините, да, это должен был быть @_, который также делает то же самое   -  person Mattigins    schedule 16.02.2015


Ответы (2)


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

Ссылка:

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

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

person Oesor    schedule 16.02.2015
comment
Спасибо за совет. Я пытался поместить () вокруг $channel, но теперь я получаю эту ошибку Can't locate object method "nicks" via package "Irssi::Irc::Server" at /root/.irssi/scripts/test.pl line 64. - person Mattigins; 17.02.2015

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

$chan = $server->channel_find('#channel');
foreach my $nick ($chan->nicks()) {
    $nickname = $nick->{nick};
}
person Mattigins    schedule 17.02.2015