in reply to Re^3: "use strict" sets $!
in thread "use strict" sets $!
otherwise its value doesn't mean anything at all.Isn't "at all" too strong here? $! (i.e. errno is initially zero (as far I remember, this is guaranteed by the C standard), and gets a non-zero value if someone sets it - for instance, in a failed system call or if in Perl it is explicitly set by assignment. Seeing it only this way, the value of $! picked up somewhere in the middle of a program execution indeed doesn't mean much.
But here we have a different situation: We see that in the program
$! is zero, which means that when Perl starts executing a (correct) program, $! happens to be zero. We also see that for instanceperl -lwe "print $!"
print zero, so just the fact that Perl has to compile a pragma, doesn't change the value of $!. But we see thatperl -lwe "use warnings; print $!"
prints a non-zero value, and from this I conclude that $! must be set somewhere somehow within strict.pm. Being a curious person, I had a look at the source of strict.pm. I didn't find a direct assignment to $! (which is no surprise - we wouldn't expect this anyway), and the system calls I found (and which could possibly set $! to a 'bad file descriptor' error number), are in blocks belonging to error handling (i.e. I would have seen an error message, if such a branch would have taken). That's why I was puzzled and became curious. I admit that it is only for academic interest and has not much practical value aside of satisfying my curiosity ;-)perl -lwe "use strict; print $!"
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: "use strict" sets $!
by ig (Vicar) on Aug 19, 2009 at 13:08 UTC |