Hi all!
I have the following function for openning a file:
sub openFile {
my ($file, $accessMode) = @_;
my $err;
if (! defined($accessMode)) { # by default, open the file for re
+ading
$accessMode = $MODE_READ;
}
if (exists($ACCESS_MODES{$accessMode})) {
if (! open(FILE, "$ACCESS_MODES{$accessMode}$file")) {
$err = $!;
if (defined($returnOnError)) {
return $FALSE;
}
&throwGenError("Can't open $file: $err"); # throw except
+ion
}
} else {
&throwGenError("In openFile: Wrong access mode $accessMode");
}
return FILE;
}
The problem is when I call it in a function, and before closing the file handler I call another function the also opens a file (another file), for example:
sub func1 {
my (@fileContent,@temp, @comment);
my $contentFh = &openFile($file1);
while (my $line = <$contentFh >) {
...
push(@fileContent,&func2($line));
...
}
}
close($contentFh);
return \@fileContent;
}
sub func2 {
my ($user) = @_;
my @groupsFile;
my $groupsFh = &openFile($file2);
@groupsFile = <$groupsFh>;
close($groupsFh);
...
return @groupsFile;
}
When calling
func1 I get the following errors to screen:
readline() on closed filehandle FILE at /var/www/cgi-bin/lib/myfile.pl
+ line 25.
It's the leine of the
while(). It doesn't happen when I don't call
func2 from within
func1, I guess the
close() call in
func2 somehow effects
func1.
Anywhy can explain the problem and suggest a solution?
Thanks a lot