Use of uninitialized value

Hallo,

ich habe in Perl, wenn ich mit strict arbeite, immer wieder mal das Problem, dass ich Fehlermeldungen wie die folgenden bekomme, ohne dass ich mir zu helfen weiss:

Use of uninitialized value in numeric gt (&gt:wink: at confirm105.pl line 118
Use of uninitialized value in numeric gt (&gt:wink: at confirm105.pl line 632
Use of uninitialized value in numeric lt (
my $popholen;
if( $popholen = Net::stuck_out_tongue:OP3->new($host) )
{
my $nom = $popholen->login($user,$pw);

Falls irgendeine Mail vorhanden

if($nom > 0) # Line 118, $nom ist Anzahl der Mails
{
…

my $zeitdiff = 1;

sub AZeit
 {
 if($zeitdiff \> 0) # Line 632
 { return (time() + (60\*60\*$zeitdiff)); }
 elsif($zeitdiff 

Weiss von Euch jemand, woran das liegt?

Chris

Hallo Chris,

die Anzahl der vorhanden Mails bekommt Du mit list :

also erst den Login:

 $popholen-\>login($user,$pw);

und dann :

 my $nom = $popholen-\>list;

Gruß
Klaus

Hallo Klaus,

das steht aber bei Cpan ganz anders drin:

login ( [USER [, PASS]] )
Returns the number of messages in the mailbox. However if there are no messages on the server the string „0E0“ will be returned. This is will give a true value in a boolean context, but zero in a numeric context.

Aber wahrscheinlich habe ich ein Problem mit dem „0E0“ wenn die Box leer ist.

list ( [MSGNUM] )
If called with an argument the list returns the size of the message in octets.
If called without arguments a reference to a hash is returned. The keys will be the MSGNUM’s of all undeleted messages and the values will be their size in octets.

Die Anzahl liefert es scheinbar nicht zurueck, man kann sie hoechstens davon ableiten.

Trotzdem danke. Ich werde damit mal herumexperimentieren.

Chris

Hallo klaus,

das Problem scheint mir eher zu sein, dass die Rueckgabe „0E0“ nicht numerisch ist aber die Rueckgabe der Anzahl eben numerisch ist.

Sind also Mails vorhanden kommt eine Zahl zurueck, sind keine vorhanden kommt ein „0E0“ zurueck.

Aber wie macht man dann die Abfrage korrekt, damit kein Fehler oder Warning auftritt?

Chris

Hallo,

das Problem scheint mir eher zu sein, dass die Rueckgabe „0E0“
nicht numerisch ist aber die Rueckgabe der Anzahl eben
numerisch ist.

„0E0“ ist in Perl genauso numerisch wie „1“ oder 1. „Numerisch“ oder nicht ist keine Frage der Daten, sondern der Operation. Wenn die Operation eine Zahl erwartet, werden die Daten zu einer Zahl konvertiert. Und das geht bei „0E0“ wunderbar.

„unitialized“ heisst, dass ein Wert undef war. Nicht „0E0“.

Gruesse,
Moritz