http://qs321.pair.com?node_id=11115784


in reply to Re^3: lexical vs. local file handles
in thread lexical vs. local file handles

Nitpicking on the HMD/HND example: It gives a compile time error, too.

I haven't answered your question about the "why" yet.

There is this special member of the Perl ecosphere called filehandle. It is special, it needs to be treated special and it is eye-catching. Beneath scalars, arrays, hashes and subs it is something "primal" in Perl. I just like filehandles and I thought they were there to be used.

OTOH, reflecting all your points makes me thoughtful. Using the idiom given by Your Mother in Re: lexical vs. local file handles solves the one case where a bareword seemed to be of advantage.

I really should abandon this habit. Thanks for your input and your patience.

Greetings,
-jo

$gryYup$d0ylprbpriprrYpkJl2xyl~rzg??P~5lp2hyl0p$

Replies are listed 'Best First'.
Re^5: lexical vs. local file handles
by haukex (Archbishop) on Apr 19, 2020 at 08:16 UTC

    Thanks for your reply. I very much like TIMTOWTDI, but I also like best practices (see also Tim Toady Bicarbonate). As I said, for small pieces of code that you have complete control over, you probably won't run into any of the described issues. But as an application grows, I imagine it would be harder and harder to keep track of all the potential issues.

    Nitpicking on the HMD/HND example: It gives a compile time error, too.

    Nope, I tested before posting :-)

    $ perl -wMstrict -le 'open local *HMD, ">", \(my $x) or die $!; print HND "Foo"; close HND; print "Done"'; echo $? Name "main::HMD" used only once: possible typo at -e line 1. print() on unopened filehandle HND at -e line 2. Done 0 $ perl -wMstrict -le 'open my $hmd, ">", \(my $x) or die $!; print $hnd "Foo"; close $hnd; print "Done"'; echo $? Global symbol "$hnd" requires explicit package name (did you forget to + declare "my $hnd"?) at -e line 2. Global symbol "$hnd" requires explicit package name (did you forget to + declare "my $hnd"?) at -e line 2. Execution of -e aborted due to compilation errors. 255

      This must have been some strange copy&paste mistake. I got an error, but afterwards re-used the source file. So the content is lost and I cannot reproduce it.

      If you hadn't convinced me before, this would.

      Greetings,
      -jo

      $gryYup$d0ylprbpriprrYpkJl2xyl~rzg??P~5lp2hyl0p$