perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 25
Click for quality!




11.02.2012 / 07:57

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  PHP: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragFehler:Use of uninitialized value in addition (+) at ./wochentagb
Seitenanfang
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!

#!/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";

Datum: 19.06.2007-12:28

Beitragre: Fehler:Use of uninitialized value in addition (+) at ./wochen
Seitenanfang
Es wird einfacher den Fehler zu finden, wenn Du use strict verwendest (siehe http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict)

Datum: 19.06.2007-16:33

Beitragre: Fehler:Use of uninitialized value in addition (+) at ./wochentagb
Seitenanfang
Der Fehler liegt hier

$monatseingabe = <STDIN>;

und weitere Fehler an den Stellen an denen du ueber <STDIN> einliest.

Denn wenn der Benutzer seine Eingabe macht gibt er zum Beispiel nicht nur die Zahl bzw. Monatsnamen ein sondern auch ein <ENTER>.
Hat der Benutzer zum Beispiel fuer den Monat "Nov" eingegeben, dann steht in $monatseingabe nicht "Nov" sondern "Nov\n", dadurch trifft keine der Bedingungen in den if-elsif-else-Anweisungen zu, $ergebnis_aus_monatseingabe, bekommt nie einen Wert zugewiesen (uninitialized value)
Das Zeichen kannst du mit chop() bzw. chomp() entfernen


my $monatseingabe = <STDIN>;
chomp($monatseingabe);

Da in deiner if-elsif-else-Anweisung nur Zuordnungen stattfinden, wuerde ich einen Hash empfehlen.


my %map_month_name_to_number = (
'Jan' => 1,
'Feb' => 2,
# ...
);

my $monatsnummer = $map_month_name_to_number{$monatseingabe}, "\n";


Zusaetzlich mit exists() oder defined() pruefen ob die Zuordnung von Monatsname zu Nummer erfolgreich war.

Bitte verwende so frueh wie moeglich in deiner Perl-Karriere die Pragmas 'strict' und 'warnings' und deklariere deine Variablen entsprechend (mit 'my', ...).


use strict;
use warnings;

my $monatseingabe = <STDIN>;

Datum: 19.06.2007-17:03

-






-
-