Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Fehler:Use of uninitialized value in addition (+) at ./wochentagberechnung

  1. #1
    Registrierter Benutzer
    Registriert seit
    13.01.2006
    Beiträge
    37

    Fehler:Use of uninitialized value in addition (+) at ./wochentagberechnung

    Hallo Forum,
    bei meinem Programm Wochentagsberechnung bekomme ich immer die Fehlermeldung: Use of uninitialized value in addition (+) at ./wochentagberechnung.pl line 105, <STDIN> line 3.

    Ich habe mir schon die Zeilen immer wieder und wieder angesehen, auch ob ich doppelte Einträge vielleicht habe, aber leider komme ich nicht dahinter, wo mein Fehler liegen soll, bzw. auch welche Fährte mich der Hinweis bringen soll?

    Wenn mir jemand einen Tipp geben könnte.

    Danke vielmals.
    Hier das Script!
    Code:
    #!/bin/perl -w
    
    print "\n";
    print "******************\n";
    print "*Datumsberechnung*\n";
    print "******************\n";
    print "\n";
    
    print "Eingabe des Tages (1 .. 31)\n";
    print "***************************\n\n";
    
    $tagesziffer = <STDIN>;
    
    $ergebnis_aus_tagesziffer = $tagesziffer % 7;
    
    print "Eingabe des Monats\n";
    print "******************\n\n";
    
    @array = qw { Jan Feb Mar Apr Mai Juni Juli Aug Sep Oct Nov Dec };
    
    foreach (@array) {
    print $_ . "\n";
    }
    
    $monatseingabe = <STDIN>;
    
    if ("$monatseingabe" eq "Jan"){$ergebnis_aus_monatseingabe=0;
    }
    elsif ("$monatseingabe" eq "Feb"){$ergebnis_aus_monatseingabe=3;
    }
    elsif ("$monatseingabe" eq "Mar"){$ergebnis_aus_monatseingabe=3;
    }
    elsif ("$monatseingabe" eq "Apr"){$ergebnis_aus_monatseingabe=6;
    }
    elsif ("$monatseingabe" eq "Mai"){$ergebnis_aus_monatseingabe=1;
    }
    elsif ("$monatseingabe" eq "Juni"){$ergebnis_aus_monatseingabe=4;
    }
    elsif ("$monatseingabe" eq "Juli"){$ergebnis_aus_monatseingabe=6;
    }
    elsif ("$monatseingabe" eq "Aug"){$ergebnis_aus_monatseingabe=2;
    }
    elsif ("$monatseingabe" eq "Sep"){$ergebnis_aus_monatseingabe=5;
    }
    elsif ("$monatseingabe" eq "Oct"){$ergebnis_aus_monatseingabe=0;
    }
    elsif ("$monatseingabe" eq "Nov"){$ergebnis_aus_monatseingabe=3;
    }
    elsif ("$monatseingabe" eq "Dec"){$ergebnis_aus_monatseingabe=5;
    }
    
    print "Das Jahr eingeben\n";
    $jahr=<STDIN>;
    print "\n";
    
    #Jahresziffer extrahieren
    
    $jahresziffer = substr($jahr,2);
    
    $ergebnis_aus_jahresziffer = ($jahresziffer + $jahresziffer / 4) % 7;
    
    #Jahrhundertziffer extrahieren und berechnen
    
    $ergebnis_aus_jahrhundertziffer = ($jahr % 4 - 3) * (-2);
    
    $ist_schaltjahr = ($jahr % 4 == 0) && ($jahr % 100 != 0) || ($jahr % 400 == 0);
    
    if (! $ist_schaltjahr)
    {
    $ergebnis_aus_schaltjahr = 0;
    print "Kein Schaltjahr\n";
    }
    else
    {print "Ist ein Schaltjahr\n\n";
    $ergebnis_aus_schaltjahr = 6;}
    
    $ende=($ergebnis_aus_tagesziffer)+($ergebnis_aus_monatseingabe)+($ergebnis_aus_jahresziffer)+($ergebnis_aus_jahrhundertziffer)+($ergebnis_aus_schaltjahr);
    
    print "$ende\n";

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von byron1778 Beitrag anzeigen
    Hallo Forum,
    bei meinem Programm Wochentagsberechnung bekomme ich immer die Fehlermeldung: Use of uninitialized value in addition (+) at ./wochentagberechnung.pl line 105, <STDIN> line 3.
    ...
    Wenn ich mir Deinen Code ausschneide und in eine Datei packe, dann hat sie nur 79 Zeilen. Was in Zeile 105 passiert, kann ich also leider nicht erkennen.

    Es ist aber immer eine gute Idee, an den Anfang des Perl-Scripts ein use strict; zu setzen, damit stellst Du sicher, dass Du nur definierte Variablen benutzt. Diese musst Du dann mit my $variable; zumindest deklarieren.

    Mir sind verschiedene Stellen aufgefallen, an denen Du nicht sicherstellst, dass eine von Dir benutzte Variable auch definiert wird:

    Du rechnest mit $tagesziffer ohne zu prüfen, ob da überhaupt ein sinnvoller Wert drin steht.

    Die if-elsif-Schleife für $ergebnis_aus_monatseingabe z. B. hat kein else. Es kann also sein, dass diese Variable überhaupt nicht definiert wird.

    Du bildest $jahresziffer aus einer Eingabe, prüfst aber wiederum nicht ab, ob Deine Eingabe überhaupt eine passende Jahresziffer liefert.

    Insgesamt: Alle Eingaben von außen sind böse - ganz böse! Du musst IMMER prüfen, ob sie einen Wert enthalten, der gültig ist, bevor Du sie weiterverwendest.

    Jan

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.02.2006
    Beiträge
    116
    Meiner Meinung nach gehört in jedes Skript use strict. Damit kann man schon viele Fehler von vornherein ausschließen weil Schreibfehler bei Variablennamen gleich angemeckert werden. Das ist häufig eine Fehlerursache...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •