我正在尝试将我见过的其他脚本拼凑起来,以便能够循环播放频道上的用户列表。
以下是我的想法
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行。
答案 0 :(得分:2)
由于my $channel = @_;
的左侧(LHS)是标量,因此它会在@_
数组上强加标量上下文。这意味着数组的长度被分配给$channel
。您希望使用my ($channel) = @_;
进行分配,以便LHS位于列表上下文中,并且@_
数组中的第一个元素将分配给您的标量。
价:
What is the difference between the scalar and list contexts in Perl?
答案 1 :(得分:1)
我想出了怎么做。
$chan = $server->channel_find('#channel');
foreach my $nick ($chan->nicks()) {
$nickname = $nick->{nick};
}