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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.