Thread Fehlermeldung die nicht da sein duerfte.. (17 answers)
Opened by Aleks at 2006-06-26 17:00

Aleks
 2006-06-26 17:00
#67624 #67624
User since
2006-06-12
19 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,
in einem Programm bekomme ich die allseits beliebte Meldung use of uninitial... . Nur dürfte die eigentlich gar nicht kommen.. Hier die dafür wichtigen teile der Funktion die mir Ärger macht:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sub test_dns_in_spectrum{
...
foreach my $name (keys %DNS_Data_ntoa){
$status = 0;
unless (exists $Spectrum_Data_ntoa{$name} ){$status += 1;};
...
# Hier teste ich ob es auch in dem %Spec.. einen Schlüssel
# $name gibt und falls das nicht so ist wird $status incrementiert.
if ($status == 3){
...
next;
} elsif ($status == 2){
....
next;
} elsif ($status == 1){
... # existiert der Schlüssel nicht, wird hier die nächste iteration gestartet. Das Programm läuft also nicht weiter...
next;
}

if ( ($DNS_Data_ntoa{$name} eq $Spectrum_Data_ntoa{$name}) && \ # und hier kriege ich den Fehler!
($DNS_Data_aton{$DNS_Data_ntoa{$name}} eq $Spectrum_Data_aton{$Spectrum_Data_ntoa{$name}}) ){
next;
} else {
....
}
}
}


Ich fasse mal kurz meinen Gedankengang zusammen:
1) $name muss != undef sein wegen foreach (keys...; außerdem hätte ich dann vorher schon eine warnung kriegen müssen (beim initialisieren).
2) $DNS_Data_ntoa{$name} muss != undef sein, siehe 1.
3) $Spectrum_Data_ntoa{$name} wird ja vorher geprüft! muss also auch != undef sein, weil sonst ja $status != 0 wäre und die Schleife per next in die nächste Iteration geschickt wird, also nicht beim Auswerten des Ausdrucks in der If Anweisung ankommt...
Ich beziehe mich hier auf die Schlüssel (exists())! Also das der Schlüssel existiert, ich meine nicht undef als value der Schlüssel.

Weiß jemand wie das sein kann? Ich hab irgendwie ein Brett vorm Kopf...

Ach ja, selbstverständlich lade ich als erstes strict,warnings und diagnostics. Ein Test mit defined() auf die Werte der Schlüssel bringt dasselbe Ergebnis.

Gruß,
Aleks

View full thread Fehlermeldung die nicht da sein duerfte..