in reply to Do I need/want to close __DATA__?

Thank you for the help and information. And from now on I will expect me and others to close DATA on finishing with it.

Here is what happens when 2 separate packages leave their DATA opened. warn reports only the last one being opened. Is it because the interpreter will detect opened DATA and localise it?

package X; while(<DATA>){ print "X:".$_ } #close(DATA); sub check_data { return defined fileno(DATA) } 1; __DATA__ 1 2 3
package Y; while(<DATA>){ print "Y:".$_ } #close(DATA); sub check_data { return defined fileno(DATA) } 1; __DATA__ 10 20 30 40 50 60
# main use lib '.'; use strict; use warnings; use X; use Y; warn "hehh"; print "X opened: ".X::check_data() ."\n"."Y opened: ".Y::check_data() ."\n";
X:1 X:2 X:3 Y:10 Y:20 Y:30 Y:40 Y:50 Y:60 hehh at x.pm line 7, <DATA> line 6. Y opened: 1 Y opened: 1

Replies are listed 'Best First'.
Re^2: Do I need/want to close __DATA__?
by haukex (Archbishop) on Apr 14, 2020 at 08:22 UTC
    Here is what happens when 2 separate packages leave their DATA opened. warn reports only the last one being opened. Is it because the interpreter will detect opened DATA and localise it?

    As I said, the interpreter simply internally keeps track of the most recently accessed filehandle; "localise" is the wrong term here IMHO because it sounds like you mean something to do with local.

      Yes I meant to make DATA local just because I did not see it being reported in warn . But as you said warn reports only the most recently accessed filehandle, and of course both DATA are opened, just not both reported by warn.

Re^2: Do I need/want to close __DATA__?
by LanX (Saint) on Apr 14, 2020 at 11:52 UTC