All strict->import (normally called via use strict) does is modify global var $^H. The compiler uses $^H to determine if it should throw strict errors, among other things.
The compiler localises $^H to the block being compiled. This is what produces the lexical scoping of the pragma.
{ # $^H is localised by the compiler # when it compiles this. use strict; # Changes $^H ... } # $^H is restored by the compiler # when it compiles this, # undoing changes in strictures.
In your example, the block being compiled when strict->import is called is your script's file block, so the strictures stay in effect until the end of the file.
Similarly scoped hash %^H is available to modules that want to be lexical pragmas without having to fight Perl for the limited bits in $^H.
Update: Added code example. Added mention of %^H.
In reply to Re: Import pragmas like strict and warnings into callers lexical scope
by ikegami
in thread Import pragmas like strict and warnings into callers lexical scope
by youwin
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |