although that isn't quite the same as being closed
So you still refuse to learn this. The code demonstrates that the handle is actually closed, despite your persistent denials. Becoming lexically inaccessible doesn't cause impacts on external programs. The output lines appearing in the given order:
ls: write error End
shows that the handle is indeed closed (causing bin/ls to complain) before the next statement of Perl is executed.
The actual mechanism is that the lexical file handle contains a reference to a GLOB, which is the same data structure that Perl uses for global variables. But this GLOB is not a global variable because it isn't stored in a symbol table. Which means that when the lexical goes out of scope (and has no references), the lexical is destroyed which removes the last reference to the GLOB which then destroys the GLOB which also closes the file handle.
There is no global variable involved (because to be a global variable it has to have global scope; that is the definition of a global variable). And it does get destroyed and it does get closed (it can be destroyed because it isn't a global variable).
- tye
In reply to Re^7: Scoping question - will file handle be closed? ("global")
by tye
in thread Scoping question - will file handle be closed?
by Monk::Thomas
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |