in reply to Automatically exiting a file within a block

As the others have said, lexical filehandles are closed automatically when they go out of scope. This does not apply to bareword filehandles such as open FILE, ..., these are essentially globals. Note that you can arrange to have other code executed at the end of the current lexical scope via the End module, although I haven't seen much code in the wild actually doing so.

Replies are listed 'Best First'.
Re^2: Automatically exiting a file within a block
by null recurrent (Novice) on Jun 23, 2019 at 23:39 UTC
    This is of course still not quite what Python's context managers provide, although sufficient in the given, parochial case. In Python, and even though presented as "idiomatic" in pretty much every entry level tut, I'm hardly ever using it in cases like these, in part for the reasons mentioned. Very different from, say, the scope guards in D, where you use them all the time, if for no other reason than this being idiomatic there. That said, context managers in Python, to be fair, are a different kind of animal as they don't just have an exit method, but an enter method too, and those can be user-defined, so you can further generalize and do all kinds of things, like checking about resources beforehand, or providing some specific setup, etc. Perl's End, whether the ordinary scriptwide form or the mentioned extension, satisfies the latter, not the former, that would be sub-level "BEGIN". There is Wrap::Sub, for instance, that might be more of a Perl equivalent. Don't think it's particularly common either, however. It's just not how you write Perl, usually.