in reply to Re^2: Do I need/want to close __DATA__?
in thread Do I need/want to close __DATA__?

Nice, I like it! ;-) This idiom (if I may call it that) is short enough that, IMHO, it doesn't even really need a sub and fits comfortably on a line with a comment explaining it:

{do eof local *%} # reset Perl's internal "last accessed" filehandle

(I had to put the do in there to get rid of a "Useless use of eof in void context"...) I find it funny that there are so many alternatives to *%, like ** and *! :-)

... but of course a sub is the more "best practice" solution here.

Update: See replies.

Replies are listed 'Best First'.
Re^4: Do I need/want to close __DATA__?
by choroba (Cardinal) on Apr 13, 2020 at 17:57 UTC
    Putting do directly before eof is dangerous. When I try it, it warns:
    do "1" failed, '.' is no longer in @INC; did you mean do "./1"? at ./1.pl line 9.

    because I have a file named 1 in the current directory, and eof local *%; returns 1.

    map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
      do "1" failed, '.' is no longer in @INC

      Oops, you're right, do EXPR is certainly not what I meant to do, my mistake. I guess a sub probably is cleanest, though something like {my $x=eof local *!} still works.

      Minor edits.