Irssi Loop Through потребители в канал

Опитвам се да сглобя други скриптове, които съм виждал, за да мога да преглеждам списък с потребители в канала.

Ето какво измислих

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" на метода на обекта чрез пакет "[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