2

我正在尝试将我看到的其他脚本拼凑起来,以便能够遍历频道上的用户列表。

这是我想出的

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

但我从中得到的只是

在 /root/.irssi/scripts/test.pl 第 64 行,如果没有包或对象引用,则无法调用方法“nicks”。

这是指

$channel->nicks()

我会以错误的方式解决这个问题吗?或者这应该有效吗?我见过许多其他使用 $channel->nicks() 的脚本,所以我知道它必须有效吗?

编辑

我还应该提到,这已经在代码中进一步定义

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

但是当我用那个 $channel 变量尝试它时,我得到了

无法通过 /root/.irssi/scripts/ 包“mattigins@mattigins.tmi.twitch.tv”(也许您忘记加载“mattigins@mattigins.tmi.twitch.tv”?)找到对象方法“nicks” test.pl 第 64 行。

4

2 回答 2

2

由于左侧 (LHS)是一个标量,因此它在数组my $channel = @_;上施加了标量上下文。@_这意味着数组的长度被分配给$channel. 您想要分配 withmy ($channel) = @_;以便 LHS 在列表上下文中,并且@_数组中的第一个元素被分配给您的标量。

参考:

Perl 中的标量上下文和列表上下文有什么区别?

Perl 中的标量和列表上下文

于 2015-02-16T18:26:37.573 回答
1

我想出了怎么做。

$chan = $server->channel_find('#channel');
foreach my $nick ($chan->nicks()) {
    $nickname = $nick->{nick};
}
于 2015-02-17T04:10:30.783 回答