2.8 Scope of a Package Directive


All files start as if you had said package main; . Any package directive remains in effect until the next package directive, unless that package directive is inside a curly- braced scope. In that case, the prior package is remembered and restored when the scope ends. Here's an example:

 package Navigation; {  # start scope block   package main;  # now in package main   sub turn_towards_heading {  # main::turn_towards_heading     .. code here ..   } }  # end scope block # back to package Navigation sub turn_towards_port { # Navigation::turn_towards_port   .. code here .. } 

The current package is lexically scoped, similar to the scope of my variables , narrowed to the innermost-enclosing brace pair or file in which the package is introduced.

Most libraries have only one package declaration at the top of the file. Most programs leave the package at the default main package. However it's nice to know that you can temporarily have a different current package. [10]

[10] Some names are always in package main regardless of the current package: ARGV , ARGVOUT , ENV , INC , SIG , STDERR , STDIN , and STDOUT . You can always refer to @INC and be assured of getting @main::INC . The punctuation mark variables such as $_ , $2 , and $! are either all lexicals or forced into package main , so when you write $ . you never get $Navigation:: . by mistake.



Learning Perl Objects, References & Modules
Learning Perl Objects, References, and Modules
ISBN: 0596004788
EAN: 2147483647
Year: 2003
Pages: 199

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net