On 8/30/05, Donald Perkovich <[EMAIL PROTECTED]> wrote:
I have a perl program that runs every hour that scans a POP3 maildrop.
About once every other day the program fails and I get this error:

Can't call method "user" on an undefined value at
/home/user/bin/fetch- headers.pl line 40.

It appears to me that the hash isn't being properly initialized.
Here is the code that initializes the hash.  None of these values
are changed in the program once they are set.

my %pop = (
     server => 'pop.example.org',
     port   =>  110,
     user   => '[EMAIL PROTECTED]',
     pass   => 'asswordpay',
     dir    => '/home/user/mail'
);

Here is Line 40.

$server->user($pop{user}) || die;

This code works just fine:

    -------------------
#!/usr/bin/perl -w
                                                                                                                                                             
use strict;
                                                                                                                                                            
my %pop = (
     server => 'pop.example.org',
     port   =>  110,
     user   => '[EMAIL PROTECTED]',
     pass   => 'asswordpay',
     dir    => '/home/user/mail'
);
                                                                                                                                                            
print $pop{user} || die;

    -------------------

I use Perl often but I'm no expert. So I guess:

> (1) Is there a better way to initialize the hash?
   No.

> (2) Could this be a fault in Perl itself?
  I don't think so.

> (3) Is it something else entirely?

Maybe the connection to the POP3 server fails once in a while
and "$server" is "undefined" and it's not pointing to the
object you think it's pointing to. Try to check the status of the
POP3 connection before issuing a call to "$server->user".

In general, you should always check for exceptions after
trying to establish a network connection.

Hope it helps,
Nelson.-
--
Homepage : http://geocities.com/arhuaco

The first principle is that you must not fool yourself
and you are the easiest person to fool.
     -- Richard Feynman.

Reply via email to