If you were running with "use warnings" then Perl would have told you what the problem is. Filehandles aren't first-class variables in Perl so you can't just return a filehandle from a function and assign it to a variable like that. You're actually using the same filehandle (FILE) for both files - which is why you can't use it after you've closed the first filehandle.
You can get round this by using lexical filehandles.
sub openFile {
my ($file, $accessMode) = @_;
my $err;
$accessMode = $MODE_READ unless defined $accessMode;
if (exists($ACCESS_MODES{$accessMode})) {
if (open(my $fh, "$ACCESS_MODES{$accessMode}$file")) {
return $fh;
} else {
$err = $!;
if (defined($returnOnError)) {
return;
}
&throwGenError("Can't open $file: $err"); # throw exception
}
} else {
&throwGenError("In openFile: Wrong access mode &accessMode");
}
return;
}
Some of your logic is a bit scary, so I haven't changed too much. You might need to check it carefully.
--
< http://www.dave.org.uk>
"The first rule of Perl club is you do not talk about
Perl club." -- Chip Salzenberg
-
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.
|