http://www.perlmonks.org?node_id=250057


in reply to Net::Aim (again)

Your title is incorrect, it should be Net::AOLIM instead of Net::AIM.

When executing example.pl that is included with Net::AOLIM, I get the following error:

Use of uninitialized value in array dereference at /usr/lib/perl5/site +_perl/5.6.1/Net/AOLIM.pm line 946, <> line 2.
Maybe AOL has made some change to the protocol.

I've been able to use Net::AIM without too many problems. You may want to try that package instead.

Replies are listed 'Best First'.
Re: Re: Net::Aim (again)
by Anonymous Monk on Apr 12, 2003 at 16:21 UTC
    I was hesitant to use Net::Aim due to the lack of information on the cpan module page. With AOLIM atleast they should examples of how to use it.

    In any case, I implemented a fast copy using Net::Aim and I'm getting an error :PARSE: How many args in ' 2'?

    The script hangs after "Login Successful". Any suggestions?

    #!/usr/bin/perl use strict; use warnings; use Net::AIM; my $aim; my $conn; print "Subject's name:"; chomp(my $destuser = <STDIN>); print "Message:"; chomp(my $message = <STDIN>); print "Starting Net::Aim\n"; $aim = new Net::AIM; print "Connecting with loging crudentials\n"; $conn = $aim->newconn(Screenname => 'wfgs343R', Password => 'iamcool'); print "Login sucessfull!\n"; $aim->start; print "Beginning AIM\n"; $aim->send_im($destuser, $message); print "Message sent.\n";
      It's been a while since I've done anything useful with Net::AIM, but I remember that it needs to handle some config events before any messages can be sent. I also noticed that AIM will not send messages if the connection is closed too soon (thus the sleep).

      This code below does the job. DEBUG is on to show some useful information, but I'd also suggest adding some print statements to gain an even better understanding of how Net::AIM functions.

      #!/usr/bin/perl use strict; use Net::AIM; sub DEBUG() { 1 } my $aim = new Net::AIM; $aim->debug(1) if (DEBUG); # provides helpful information $aim->newconn( Screenname => 'my_name', Password => 'my_password' ) or + die "Can't connect to AIM server.\n"; my $conn = $aim->getconn(); $conn->set_handler('config', \&on_config); $aim->set('config_done', 0); my $done = 0; while (! $done) { $aim->do_one_loop(); if ($aim->get('config_done')) { $aim->send_im('my_buddy', 'my_message'); sleep 5; $done = 1; } else { $aim->do_one_loop(); } } sub on_config { my ($self, $evt, $from, $to) = @_; my $str = shift @{$evt->args()}; $self->set_config_str($str, 1); $self->send_config(); $self->set('config_done', 1); }
      From Net::AIM:
      $aim->start()
          This just starts an infinte loop of $aim->do_one_loop;
      If you take out the $aim->start;, your script should work.

      Update Hmm, just tried it and it doesn't work. You might need to set some type of handler to send the message and then do the $aim->start...