dunno if this is relevent or anything but can anybody help me with connecting to an msn server using perl. I'm trying to do it without using the MSN.pm available on the internet.

I can't get past the MD5 encryption stage

I hate to do this, but here's the entire source

Code:
#!/usr/bin/perl

my $socket;
print "Enter username: ";
my $username = <STDIN>;
chomp($username);
print "Enter password: ";
my $passsword = <STDIN>;
chomp($password);
print "Okay, connecting...\n";
my $counter = 0;
my @fresponse;
use IO::Socket;
use Digest::MD5  qw(md5 md5_hex md5_base64);

msnconnect();

sub msnsend
{
 @sendarray = @_;
 print ">> $sendarray[0] $counter $sendarray[1]\n";
 print $socket "$sendarray[0] $counter $sendarray[1]\r\n";
 $counter++;
}

sub msnread
{
 my $response;
 if(($response = <$socket>))
 {
  chop($response);
  chop($response);
  @fresponse = split(/ /,$response,5);
  if($fresponse[1] == $counter - 1)
  {
   print "<< $response\n";
   return 1;
  }
  else
  {
   print "<< $response\n";
   print "*** UNEXPECTED RESPONSE ***";
   return 0;
  }
 }
 else
 {
  return 0;
 }
}

sub msnconnect
{
 my $server = "messenger.hotmail.com";
 my $port = 1863;
 my $alive = 1;
 while($alive)
 {
  $socket = IO::Socket::INET->new(PeerAddr => $server,
                                  PeerPort => $port,
                                  Proto    => 'tcp') or die "Connection failed";
  msnsend("VER","MSNP2");
  while(msnread())
  {
   if($fresponse[0] eq "VER")
   {
    msnsend("INF","");
   }
   elsif($fresponse[0] eq "INF")
   {
    msnsend("USR","MD5 I $username");
   } 
   elsif($fresponse[0] eq "XFR")
   {
    print "*** Switching to: $fresponse[3]\n";   
    ($server, $port) = split(/:/,$fresponse[3],2);    
    close($socket);
   }
   elsif($fresponse[0] eq "USR")
   {
    if($fresponse[2] eq "MD5" && $fresponse[3] eq "S")
    {
     my $digest = md5($fresponse[4] . $password) . md5($password);
     $digest = unpack("H" . length($digest), $digest);
     msnsend("USR","MD5 S " . $digest);
    }
    elsif($fresponse[2] eq "OK")
    {
     print "yay";
    }
   }
   elsif($fresponse[0] eq "911")
   {
    print "*** Connection closed by server.";
    close($socket);
    $alive = 0;
   }
   else
   {
    close($socket);
    $alive = 0;
   }

  }
 }
}
sorry its not commented or anything.