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。那太棒了!非常感谢你的帮助!