Perl:IRC通知打印
以下代码存在一些问题Perl:IRC通知打印,perl,Perl,以下代码存在一些问题 my $file=File::Tail->new("/var/log/messages"); while (defined(my $line=$file->read)) { print $sock "NOTICE #logs $line"; } 正如您所见,我正在跟踪服务器消息日志(有效)并将其作为通知打印到IRC套接字中,但出于某种原因,它只将每行的第一个字打印到频道中-例如,它只打印“Jan”,因为这是一个月 有人能帮忙吗 [06:55:48] IRC
my $file=File::Tail->new("/var/log/messages");
while (defined(my $line=$file->read)) {
print $sock "NOTICE #logs $line";
}
正如您所见,我正在跟踪服务器消息日志(有效)并将其作为通知打印到IRC套接字中,但出于某种原因,它只将每行的第一个字打印到频道中-例如,它只打印“Jan”,因为这是一个月
有人能帮忙吗
[06:55:48] IRCBOT (~IRCBOT@10.1.0.4) joined the channel.
[06:56:00] -IRCBOT- Jan
[06:56:00] -IRCBOT- Jan
[06:56:00] -IRCBOT- Jan
[06:56:00] -IRCBOT- Jan
[06:56:00] -IRCBOT- Jan
[06:56:02] -IRCBOT- Jan
非常感谢
编辑:以防万一,这就是我连接IRC服务器的方式
use IO::Socket;
use File::Tail;
my $file=File::Tail->new("/var/log/messages");
my $server = "irc.example.co.uk";
my $nick = "IRCBOT";
my $login = "IRCBOT";
my $channel = "#logs";
my $sock = new IO::Socket::INET(PeerAddr => $server,
PeerPort => 6667,
Proto => 'tcp') or
die "Can't connect\n";
您需要在文本字符串前面加一个:字符
print $sock "NOTICE #logs :$line";
如果要跳出“$行”,可以执行以下操作:
print $sock "NOTICE #logs :\x01$line\x01";
默认情况下,IRC协议按空格分隔参数,您需要在文本字符串之前包含前导分号,以指示它是尾随参数,并且不应分隔
NOTICE #logs Jan 1st 2014
被视为一个命令加上4个参数
NOTICE #logs :Jan 1st 2014 ... more stuff ... long line
被视为一个命令加上一个扩展到CR LF的参数(可能包括尾随空格)您不需要在消息开头加一个“:”或“'”?即
print$sock“NOTICE”#logs:$line";代码>滚动您自己的原始IRC库是否有特定的原因?否则我建议找一个CPAN。那太棒了!非常感谢你的帮助!