Irssi在Channel中循环用户

时间:2015-02-16 17:38:02

标签: perl irc 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”?)atroot/.irssi/scripts/test.pl   第64行。

2 个答案:

答案 0 :(得分:2)

由于my $channel = @_;的左侧(LHS)是标量,因此它会在@_数组上强加标量上下文。这意味着数组的长度被分配给$channel。您希望使用my ($channel) = @_;进行分配,以便LHS位于列表上下文中,并且@_数组中的第一个元素将分配给您的标量。

价:

What is the difference between the scalar and list contexts in Perl?

Scalar and List context in Perl

答案 1 :(得分:1)

我想出了怎么做。

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