Thread Problem mit der Verwendung von undef (15 answers)
Opened by crojay at 2011-04-20 11:17

crojay
 2011-04-20 11:17
#147881 #147881
User since
2011-03-08
81 Artikel
BenutzerIn
[default_avatar]
Hi,

vielleicht habe ich auch nur ein Verständnisproblem.

Ich habe eine Sub mit der ich eine File in einen Hash einlese, wenn diese Datei nicht existiert dann sollte auch nichts passieren. Aus diesem Grund gibt die Sub ein undef zurück wenn die Datei nicht existiert
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub readFileIntoHash{
my $inputFile = $_[0];
print "using input file $inputFile\n" ;
if (-e $inputFile){
open (HASHFILE,$inputFile) || die "file $inputFile konnte nicht geoeffnet werden\n";
my %exportHash = map { chomp; split /=/, $_, 2; } <HASHFILE>;
close(HASHFILE);
return %exportHash;
}
else{
print "file $inputFile does not exist, returning undef\n";
return undef;
}
}


Bei der Verwendung der Sub dachte ich, das ich mit defined prüfen kann ob der HASH befüllt wurde (DAtei existiert also) oder nicht.

Code: (dl )
1
2
3
4
5
6
7
8
9
my %propertyHash = &readFileIntoHash($globalFormPageCfgFile);
if (defined %propertyHash){
print "\n%property is defined \n it contains " . keys(%propertyHash) ."\n" ;
$propertyHash{'pageCount'} = $pageSizeForForm;
}
else{
%propertyHash = ();
$propertyHash{'pageCount'} = $pageSizeForForm;
}


Beim ausführen meines Codes sehe ich, dass wenn auch die Datei nicht existiert, es immer in den defined block geht.

Ich bekomme dann den Output

%property is defined
it contains 1

Ich hätte erwartet, dass es nicht in diesen zweig geht .... kann mir jemand erklären wieso das so ist?

Danke

View full thread Problem mit der Verwendung von undef