2014-01-21 4 views
1

Имея несколько проблем с кодом ниже ..Perl: IRC Примечание Печать

my $file=File::Tail->new("/var/log/messages"); 
while (defined(my $line=$file->read)) { 
print $sock "NOTICE #logs $line"; 
} 

Как вы можете видеть, я хвостовые журналы сервер сообщений (который работает) и печать в IRC гнездо в виде УВЕДОМЛЕНИЕ, но по какой-то причине оно только распечатывает первое слово каждой строки в канале - например, это только печать «Ян», поскольку это месяц.

Может ли кто-нибудь помочь в этом?

[06:55:48] IRCBOT ([email protected]) 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 

Большое спасибо заранее!

EDIT: Только в случае, если это имеет значение, это то, как я подключиться к серверу 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"; 
+0

вам не нужно делать поставить «:» или «» в начале сообщения, т. е. «print $ sock» NOTICE #logs: $ line »;' – kfsone

+0

Есть ли какая-то конкретная причина для прокатки собственной библиотеки IRC? В противном случае я предлагаю глядя в CPAN для одного. – AlfredoVR

ответ

2

Вам необходимо предварить текстовую строку с: характер,

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 (возможно, в том числе задних пробелов)

+0

Это фантастика! uch за вашу помощь! –

Смежные вопросы