This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Rewrite paragraph on using strict and warnings
[perl5.git] / pod / perlmod.pod
index 4a7c62d..fdfb381 100644 (file)
@@ -4,26 +4,66 @@ perlmod - Perl modules (packages and symbol tables)
 
 =head1 DESCRIPTION
 
+=head2 Is this the document you were after?
+
+There are other documents which might contain the information that you're
+looking for:
+
+=over 2
+
+=item This doc
+
+Perl's packages, namespaces, and some info on classes.
+
+=item L<perlnewmod>
+
+Tutorial on making a new module.
+
+=item L<perlmodstyle>
+
+Best practices for making a new module.
+
+=back
+
 =head2 Packages
 X<package> X<namespace> X<variable, global> X<global variable> X<global>
 
-Perl provides a mechanism for alternative namespaces to protect
-packages from stomping on each other's variables.  In fact, there's
-really no such thing as a global variable in Perl.  The package
-statement declares the compilation unit as being in the given
-namespace.  The scope of the package declaration is from the
+Unlike Perl 4, in which all the variables were dynamic and shared one
+global name space, causing maintainability problems, Perl 5 provides two
+mechanisms for protecting code from having its variables stomped on by
+other code: lexically scoped variables created with C<my> or C<state> and
+namespaced global variables, which are exposed via the C<vars> pragma,
+or the C<our> keyword. Any global variable is considered to
+be part of a namespace and can be accessed via a "fully qualified form".
+Conversely, any lexically scoped variable is considered to be part of
+that lexical-scope, and does not have a "fully qualified form".
+
+In perl namespaces are called "packages" and
+the C<package> declaration tells the compiler which
+namespace to prefix to C<our> variables and unqualified dynamic names.
+This both protects
+against accidental stomping and provides an interface for deliberately
+clobbering global dynamic variables declared and used in other scopes or
+packages, when that is what you want to do.
+
+The scope of the C<package> declaration is from the
 declaration itself through the end of the enclosing block, C<eval>,
-or file, whichever comes first (the same scope as the my() and
-local() operators).  Unqualified dynamic identifiers will be in
-this namespace, except for those few identifiers that if unqualified,
+or file, whichever comes first (the same scope as the my(), our(), state(), and
+local() operators, and also the effect
+of the experimental "reference aliasing," which may change), or until
+the next C<package> declaration.  Unqualified dynamic identifiers will be in
+this namespace, except for those few identifiers that, if unqualified,
 default to the main package instead of the current one as described
-below.  A package statement affects only dynamic variables--including
-those you've used local() on--but I<not> lexical variables created
-with my().  Typically it would be the first declaration in a file
-included by the C<do>, C<require>, or C<use> operators.  You can
-switch into a package in more than one place; it merely influences
-which symbol table is used by the compiler for the rest of that
-block.  You can refer to variables and filehandles in other packages
+below.  A C<package> statement affects only dynamic global
+symbols, including subroutine names, and variables you've used local()
+on, but I<not> lexical variables created with my(), our() or state().
+
+Typically, a C<package> statement is the first declaration in a file
+included in a program by one of the C<do>, C<require>, or C<use> operators.  You can
+switch into a package in more than one place: C<package> has no
+effect beyond specifying which symbol table the compiler will use for
+dynamic symbols for the rest of that block or until the next C<package> statement.
+You can refer to variables and filehandles in other packages
 by prefixing the identifier with the package name and a double
 colon: C<$Package::Variable>.  If the package name is null, the
 C<main> package is assumed.  That is, C<$::sail> is equivalent to
@@ -48,7 +88,8 @@ are either local to the current package, or must be fully qualified
 from the outer package name down.  For instance, there is nowhere
 within package C<OUTER> that C<$INNER::var> refers to
 C<$OUTER::INNER::var>.  C<INNER> refers to a totally
-separate global package.
+separate global package. The custom of treating package names as a
+hierarchy is very strong, but the language in no way enforces it.
 
 Only identifiers starting with letters (or underscore) are stored
 in a package's symbol table.  All other symbols are kept in package
@@ -66,7 +107,7 @@ main, but we decided it was more useful for package writers to be able
 to use leading underscore to indicate private variables and method names.
 However, variables and functions named with a single C<_>, such as
 $_ and C<sub _>, are still forced into the package C<main>.  See also
-L<perlvar/"Technical Note on the Syntax of Variable Names">.
+L<perlvar/"The Syntax of Variable Names">.
 
 C<eval>ed strings are compiled in the package in which the eval() was
 compiled.  (Assignments to C<$SIG{}>, however, assume the signal
@@ -80,7 +121,9 @@ expressions in the context of the C<main> package (or wherever you came
 from).  See L<perldebug>.
 
 The special symbol C<__PACKAGE__> contains the current package, but cannot
-(easily) be used to construct variable names.
+(easily) be used to construct variable names. After C<my($foo)> has hidden
+package variable C<$foo>, it can still be accessed, without knowing what
+package you are in, as C<${__PACKAGE__.'::foo'}>.
 
 See L<perlsub> for other scoping issues related to my() and local(),
 and L<perlref> regarding closures.
@@ -102,6 +145,10 @@ You can use this to print out all the variables in a package, for
 instance.  The standard but antiquated F<dumpvar.pl> library and
 the CPAN module Devel::Symdump make use of this.
 
+The results of creating new symbol table entries directly or modifying any
+entries that are not already typeglobs are undefined and subject to change
+between releases of perl.
+
 Assignment to a typeglob performs an aliasing operation, i.e.,
 
     *dick = *richard;
@@ -134,7 +181,7 @@ refer to the same scalar value. This means that the following code:
     }
 
 Would print '1', because C<$foo> holds a reference to the I<original>
-C<$bar> -- the one that was stuffed away by C<local()> and which will be
+C<$bar>. The one that was stuffed away by C<local()> and which will be
 restored when the block ends. Because variables are accessed through the
 typeglob, you can use C<*foo = *bar> to create an alias which can be
 localized. (But be aware that this means you can't have a separate
@@ -191,7 +238,8 @@ in a subroutine that gets passed typeglobs as arguments:
 
     sub identify_typeglob {
         my $glob = shift;
-        print 'You gave me ', *{$glob}{PACKAGE}, '::', *{$glob}{NAME}, "\n";
+        print 'You gave me ', *{$glob}{PACKAGE},
+            '::', *{$glob}{NAME}, "\n";
     }
     identify_typeglob *foo;
     identify_typeglob *bar::baz;
@@ -267,7 +315,7 @@ these code blocks by name.
 A C<BEGIN> code block is executed as soon as possible, that is, the moment
 it is completely defined, even before the rest of the containing file (or
 string) is parsed.  You may have multiple C<BEGIN> blocks within a file (or
-eval'ed string) -- they will execute in order of definition.  Because a C<BEGIN>
+eval'ed string); they will execute in order of definition.  Because a C<BEGIN>
 code block executes immediately, it can pull in definitions of subroutines
 and such from other files in time to be visible to the rest of the compile
 and run time.  Once a C<BEGIN> has run, it is immediately undefined and any
@@ -294,27 +342,38 @@ value of the program.  Beware of changing C<$?> by accident (e.g. by
 running something via C<system>).
 X<$?>
 
+Inside of a C<END> block, the value of C<${^GLOBAL_PHASE}> will be
+C<"END">.
+
 C<UNITCHECK>, C<CHECK> and C<INIT> code blocks are useful to catch the
 transition between the compilation phase and the execution phase of
 the main program.
 
 C<UNITCHECK> blocks are run just after the unit which defined them has
 been compiled.  The main program file and each module it loads are
-compilation units, as are string C<eval>s, code compiled using the
+compilation units, as are string C<eval>s, run-time code compiled using the
 C<(?{ })> construct in a regex, calls to C<do FILE>, C<require FILE>,
 and code after the C<-e> switch on the command line.
 
+C<BEGIN> and C<UNITCHECK> blocks are not directly related to the phase of
+the interpreter.  They can be created and executed during any phase.
+
 C<CHECK> code blocks are run just after the B<initial> Perl compile phase ends
 and before the run time begins, in LIFO order.  C<CHECK> code blocks are used
 in the Perl compiler suite to save the compiled state of the program.
 
+Inside of a C<CHECK> block, the value of C<${^GLOBAL_PHASE}> will be
+C<"CHECK">.
+
 C<INIT> blocks are run just before the Perl runtime begins execution, in
 "first in, first out" (FIFO) order.
 
-The C<CHECK> and C<INIT> code blocks will not be executed inside a string
-eval(), if that eval() happens after the end of the main compilation
-phase; that can be a problem in mod_perl and other persistent environments
-which use C<eval STRING> to load code at runtime.
+Inside of an C<INIT> block, the value of C<${^GLOBAL_PHASE}> will be C<"INIT">.
+
+The C<CHECK> and C<INIT> blocks in code compiled by C<require>, string C<do>,
+or string C<eval> will not be executed if they occur after the end of the
+main compilation phase; that can be a problem in mod_perl and other persistent
+environments which use those functions to load code at runtime.
 
 When you use the B<-n> and B<-p> switches to Perl, C<BEGIN> and
 C<END> work just as they do in B<awk>, as a degenerate case.
@@ -353,7 +412,7 @@ The B<begincheck> program makes it all clear, eventually:
   }
   INIT { print  " 9.   You'll see the difference right away.\n" }
 
-  print         "13.   It merely _looks_ like it should be confusing.\n";
+  print         "13.   It only _looks_ like it should be confusing.\n";
 
   __END__
 
@@ -366,7 +425,7 @@ package may also derive some of its methods from another class (package)
 by listing the other package name(s) in its global @ISA array (which
 must be a package global, not a lexical).
 
-For more on this, see L<perltoot> and L<perlobj>.
+For more on this, see L<perlootut> and L<perlobj>.
 
 =head2 Perl Modules
 X<module>
@@ -388,66 +447,48 @@ create a file called F<Some/Module.pm> and start with this template:
     use strict;
     use warnings;
 
-    BEGIN {
-        use Exporter   ();
-        our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
+    # Get the import method from Exporter to export functions and
+    # variables
+    use Exporter 5.57 'import';
 
-        # set the version for version checking
-        $VERSION     = 1.00;
-        # if using RCS/CVS, this may be preferred
-        $VERSION = sprintf "%d.%03d", q$Revision: 1.1 $ =~ /(\d+)/g;
+    # set the version for version checking
+    our $VERSION     = '1.00';
 
-        @ISA         = qw(Exporter);
-        @EXPORT      = qw(&func1 &func2 &func4);
-        %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
+    # Functions and variables which are exported by default
+    our @EXPORT      = qw(func1 func2);
 
-        # your exported package globals go here,
-        # as well as any optionally exported functions
-        @EXPORT_OK   = qw($Var1 %Hashit &func3);
-    }
-    our @EXPORT_OK;
+    # Functions and variables which can be optionally exported
+    our @EXPORT_OK   = qw($Var1 %Hashit func3);
 
     # exported package globals go here
-    our $Var1;
-    our %Hashit;
+    our $Var1    = '';
+    our %Hashit  = ();
 
     # non-exported package globals go here
-    our @more;
-    our $stuff;
-
-    # initialize package globals, first exported ones
-    $Var1   = '';
-    %Hashit = ();
-
-    # then the others (which are still accessible as $Some::Module::stuff)
-    $stuff  = '';
-    @more   = ();
+    # (they are still accessible as $Some::Module::stuff)
+    our @more    = ();
+    our $stuff   = '';
 
-    # all file-scoped lexicals must be created before
-    # the functions below that use them.
-
-    # file-private lexicals go here
+    # file-private lexicals go here, before any functions which use them
     my $priv_var    = '';
     my %secret_hash = ();
 
     # here's a file-private function as a closure,
-    # callable as &$priv_func;  it cannot be prototyped.
+    # callable as $priv_func->();
     my $priv_func = sub {
-        # stuff goes here.
+        ...
     };
 
     # make all your functions, whether exported or not;
     # remember to put something interesting in the {} stubs
-    sub func1      {}    # no prototype
-    sub func2()    {}    # proto'd void
-    sub func3($$)  {}    # proto'd to 2 scalars
-
-    # this one isn't exported, but could be called!
-    sub func4(\%)  {}    # proto'd to 1 hash ref
+    sub func1      { ... }
+    sub func2      { ... }
 
-    END { }       # module clean-up code here (global destructor)
+    # this one isn't always exported, but could be called directly
+    # as Some::Module::func3()
+    sub func3      { ... }
 
-    ## YOUR CODE GOES HERE
+    END { ... }       # module clean-up code here (global destructor)
 
     1;  # don't forget to return a true value from the file
 
@@ -465,11 +506,11 @@ or
 
 This is exactly equivalent to
 
-    BEGIN { require Module; import Module; }
+    BEGIN { require 'Module.pm'; 'Module'->import; }
 
 or
 
-    BEGIN { require Module; import Module LIST; }
+    BEGIN { require 'Module.pm'; 'Module'->import( LIST ); }
 
 As a special case
 
@@ -477,7 +518,7 @@ As a special case
 
 is exactly equivalent to
 
-    BEGIN { require Module; }
+    BEGIN { require 'Module.pm'; }
 
 All Perl module files have the extension F<.pm>.  The C<use> operator
 assumes this so you don't have to spell out "F<Module.pm>" in quotes.
@@ -545,15 +586,14 @@ X<threadsafe> X<thread safe>
 X<module, threadsafe> X<module, thread safe>
 X<CLONE> X<CLONE_SKIP> X<thread> X<threads> X<ithread>
 
-Since 5.6.0, Perl has had support for a new type of threads called
-interpreter threads (ithreads). These threads can be used explicitly
-and implicitly.
+Perl supports a type of threads called interpreter threads (ithreads).
+These threads can be used explicitly and implicitly.
 
 Ithreads work by cloning the data tree so that no data is shared
 between different threads. These threads can be used by using the C<threads>
 module or by doing fork() on win32 (fake fork() support). When a
 thread is cloned all Perl data is cloned, however non-Perl data cannot
-be cloned automatically.  Perl after 5.7.2 has support for the C<CLONE>
+be cloned automatically.  Perl after 5.8.0 has support for the C<CLONE>
 special subroutine.  In C<CLONE> you can do whatever
 you need to do,
 like for example handle the cloning of non-Perl data, if necessary.
@@ -576,7 +616,7 @@ For example: if in the parent there are two references to a single blessed
 hash, then in the child there will be two references to a single undefined
 scalar value instead.
 This provides a simple mechanism for making a module threadsafe; just add
-C<sub CLONE_SKIP { 1 }> at the top of the class, and C<DESTROY()> will be
+C<sub CLONE_SKIP { 1 }> at the top of the class, and C<DESTROY()> will
 now only be called once per object. Of course, if the child thread needs
 to make use of the objects, then a more sophisticated approach is
 needed.
@@ -591,7 +631,7 @@ C<1> value.
 See L<perlmodlib> for general style issues related to building Perl
 modules and classes, as well as descriptions of the standard library
 and CPAN, L<Exporter> for how Perl's standard import/export mechanism
-works, L<perltoot> and L<perltooc> for an in-depth tutorial on
+works, L<perlootut> and L<perlobj> for in-depth information on
 creating classes, L<perlobj> for a hard-core reference document on
 objects, L<perlsub> for an explanation of functions and scoping,
 and L<perlxstut> and L<perlguts> for more information on writing