Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: Import pragmas like strict and warnings into callers lexical scope

by ikegami (Patriarch)
on Feb 11, 2011 at 19:44 UTC ( [id://887668]=note: print w/replies, xml ) Need Help??


in reply to Import pragmas like strict and warnings into callers lexical scope

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.

Replies are listed 'Best First'.
Re^2: Import pragmas like strict and warnings into callers lexical scope
by youwin (Beadle) on Feb 11, 2011 at 22:35 UTC
    Is it special that Perl restores $^H at the end of the enclosing block? Like could I write an import statement that does the same with a different global variable ($main::G for instance)?
      It's special to $^H and %^H, but %^H was created to give you access to that behaviour
      $^H{'mypragma'} = ...;
      $^H{'mypragma::G'} = ...;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://887668]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (5)
As of 2024-04-19 17:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found