今日は少し進展あり。ちなみにテスト時はTonIrcdを使っています。Windowsで簡単に動くIRCdってこれしかないんですもの…
まずは本日付のソース。

use strict;
use Socket;

print "Script Start!\n";

my $servername='127.0.0.1';
my $struct = sockaddr_in(6667,inet_aton($servername));

socket(SOCKET, PF_INET, SOCK_STREAM, 0)
or die('ソケット作成失敗(´・ω・`)');

connect(SOCKET, $struct)
or die('接続失敗(´・ω・`)');

select SOCKET;

$|=1;

print SOCKET ":testnick USER guest tolmoon tolsun :Ronnie Reagan\r\n";

print SOCKET ":testnick NICK Wiz\r\n";

my $buf;

while($buf=<SOCKET>)
{
print STDOUT "$buf";
}


まずみていただきたいのは

select SOCKET;

$|=1;

この2行。デフォのハンドルをSOCKETにし、そのハンドルのバッファリングをしないようにしています。これの代わりにautoflush SOCKET(1);でもいいですが、これを使う場合はFileHandleモジュールが必要になります。

そして最後のループ。SOCKETから1行読み出してそれを表示しています。これで嵌ったんですが、selectでデフォルトのハンドルをSOCKETにしているので、ただprintするだけではSOCKETに書いてしまうんですね。というわけで明示的にSTDOUTを指定。

というわけで、ともかくまぁログインはできるようになりました。