in reply to Re: passing file handle to functions
in thread passing file handle to functions

foreach $file (@ARGV) { process($file, 'fh00'); } sub process { my($filename, $input) = @_; $input++; # this is a string increment unless (open($input, $filename)) { print STDERR "Can't open $filename: $!\n"; return; } local $_; while (<$input>) { # note use of indirection if (/^#include "(.*)"/) { process($1, $input); next; } #... # whatever } }

Did you try that under "use strict"?

Can't use string ("fh01") as a symbol ref while "strict refs" in use

From perldoc open:

If FILEHANDLE is an undefined scalar variable (or array or hash element) the variable is assigned a reference to a new anonymous filehandle, otherwise if FILEHANDLE is an expression, its value is used as the name of the real filehandle wanted. (This is considered a symbolic reference, so use strict 'refs' should not be in effect.)

So what you're trying only works with "use strict" if the variable that you use for the filehandle contains an undefined value.

--
<http://dave.org.uk>

"The first rule of Perl club is you do not talk about Perl club."
-- Chip Salzenberg

Replies are listed 'Best First'.
Re^3: passing file handle to functions
by UnderMine (Friar) on May 18, 2006 at 11:32 UTC

    True. I was quoting directly from perldoc perlfunc examples for open. Which seams different from the perldoc open.

    UnderMine

      Wow. That example should probably just go away from the docs. It's not strict-safe and it doesn't even make sense: the filehandle variable is 'fh01' every time.

      Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
      How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart