man > PERLMOD(1)

PERLMOD(1)                        Perl Programmers Reference Guide                        PERLMOD(1)

NAME
       perlmod - Perl modules (packages and symbol tables)

DESCRIPTION
   Is this the document you were after?
       There are other documents which might contain the information that you're looking for:

       This doc
         Perl's packages, namespaces, and some info on classes.

       perlnewmod
         Tutorial on making a new module.

       perlmodstyle
         Best practices for making a new module.

   Packages
       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 "my"
       or "state" and namespaced global variables, which are exposed via the "vars" pragma,  or  the
       "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 "package" declaration tells the compiler
       which namespace to prefix to "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 "package" declaration is from the declaration itself through the end of  the
       enclosing  block,  "eval", 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 "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  global symbols, including subroutine names, and variables you've used
       local() on, but not lexical variables created with my(), our() or state().

       Typically, a "package" statement is the first declaration in a file included in a program  by
       one  of  the "do", "require", or "use" operators.  You can switch into a package in more than
       one place: "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  "package"  statement.   You
       can refer to variables and filehandles in other packages by prefixing the identifier with the
       package name and a double colon: $Package::Variable.  If the package name is null, the "main"
       package is assumed.  That is, $::sail is equivalent to $main::sail.

       The  old  package  delimiter  was  a  single  quote,  but  double  colon is now the preferred
       delimiter, in part because it's more readable to  humans,  and  in  part  because  it's  more
       readable  to  emacs  macros.   It also makes C++ programmers feel like they know what's going
       on--as opposed to using  the  single  quote  as  separator,  which  was  there  to  make  Ada
       programmers feel like they knew what was going on.  Because the old-fashioned syntax is still
       supported  for  backwards  compatibility,  if  you try to use a string like "This is $owner's
       house", you'll be accessing $owner::s; that is, the $s variable in package "owner", which  is
       probably not what you meant.  Use braces to disambiguate, as in "This is ${owner}'s house".

       Using "'" as a package separator is deprecated and will be removed in Perl 5.40.

       Packages  may  themselves contain package separators, as in $OUTER::INNER::var.  This implies
       nothing about the order of name lookups,  however.   There  are  no  relative  packages:  all
       symbols  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  "OUTER"  that  $INNER::var
       refers  to  $OUTER::INNER::var.   "INNER"  refers  to  a totally 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 "main", including  all  punctuation  variables,
       like  $_.   In  addition,  when  unqualified,  the  identifiers  STDIN, STDOUT, STDERR, ARGV,
       ARGVOUT, ENV, INC, and SIG are forced to be in package  "main",  even  when  used  for  other
       purposes  than  their built-in ones.  If you have a package called "m", "s", or "y", then you
       can't use the qualified form of an identifier because it would be instead  interpreted  as  a
       pattern match, a substitution, or a transliteration.

       Variables  beginning  with  underscore used to be forced into package 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 "_", such
       as $_ and "sub _", are still forced into  the  package  "main".   See  also  "The  Syntax  of
       Variable Names" in perlvar.

       "eval"ed  strings are compiled in the package in which the eval() was compiled.  (Assignments
       to "$SIG{}", however, assume the signal handler specified is in the "main" package.   Qualify
       the  signal handler name if you wish to have a signal handler in a package.)  For an example,
       examine perldb.pl in the Perl library.  It initially switches to the "DB" package so that the
       debugger doesn't interfere with variables in the program you are trying to debug.  At various
       points, however, it temporarily switches back to  the  "main"  package  to  evaluate  various
       expressions in the context of the "main" package (or wherever you came from).  See perldebug.

       The special symbol "__PACKAGE__" contains the current package, but cannot (easily) be used to
       construct  variable  names.  After my($foo) has hidden package variable $foo, it can still be
       accessed, without knowing what package you are in, as "${__PACKAGE__.'::foo'}".

       See perlsub for other scoping issues related to  my()  and  local(),  and  perlref  regarding
       closures.

   Symbol Tables
       The  symbol table for a package happens to be stored in the hash of that name with two colons
       appended.  The main symbol table's name is thus %main::, or  %::  for  short.   Likewise  the
       symbol table for the nested package mentioned earlier is named %OUTER::INNER::.

       The  value  in  each  entry  of  the hash is what you are referring to when you use the *name
       typeglob notation.

           local *main::foo    = *main::bar;

       You can use this to print out all the variables in a package, for instance.  The standard but
       antiquated 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;

       causes  variables,  subroutines,  formats,  and file and directory handles accessible via the
       identifier "richard" also to be accessible via the identifier "dick".  If you want  to  alias
       only a particular variable or subroutine, assign a reference instead:

           *dick = \$richard;

       Which  makes  $richard and $dick the same variable, but leaves @richard and @dick as separate
       arrays.  Tricky, eh?

       There is one subtle difference between the following statements:

           *foo = *bar;
           *foo = \$bar;

       "*foo = *bar" makes the typeglobs themselves synonymous while "*foo = \$bar" makes the SCALAR
       portions of two distinct typeglobs refer to the  same  scalar  value.  This  means  that  the
       following code:

           $bar = 1;
           *foo = \$bar;       # Make $foo an alias for $bar

           {
               local $bar = 2; # Restrict changes to block
               print $foo;     # Prints '1'!
           }

       Would  print  '1',  because  $foo  holds  a  reference to the original $bar. The one that was
       stuffed away by local() and which will be restored when the block ends. Because variables are
       accessed through the typeglob, you can use "*foo = *bar" to create  an  alias  which  can  be
       localized. (But be aware that this means you can't have a separate @foo and @bar, etc.)

       What  makes  all  of  this  important  is  that the Exporter module uses glob aliasing as the
       import/export mechanism. Whether or not you can properly localize a variable  that  has  been
       exported from a module depends on how it was exported:

           @EXPORT = qw($FOO); # Usual form, can't be localized
           @EXPORT = qw(*FOO); # Can be localized

       You  can  work  around the first case by using the fully qualified name ($Package::FOO) where
       you need a local value, or by overriding it by saying "*FOO = *Package::FOO" in your script.

       The "*x = \$y" mechanism may be used to  pass  and  return  cheap  references  into  or  from
       subroutines  if  you  don't  want  to  copy the whole thing.  It only works when assigning to
       dynamic variables, not lexicals.

           %some_hash = ();                    # can't be my()
           *some_hash = fn( \%another_hash );
           sub fn {
               local *hashsym = shift;
               # now use %hashsym normally, and you
               # will affect the caller's %another_hash
               my %nhash = (); # do what you want
               return \%nhash;
           }

       On return, the reference will overwrite the hash slot in the symbol table  specified  by  the
       *some_hash typeglob.  This is a somewhat tricky way of passing around references cheaply when
       you don't want to have to remember to dereference variables explicitly.

       Another use of symbol tables is for making "constant" scalars.

           *PI = \3.14159265358979;

       Now  you cannot alter $PI, which is probably a good thing all in all.  This isn't the same as
       a constant subroutine,  which  is  subject  to  optimization  at  compile-time.   A  constant
       subroutine  is  one prototyped to take no arguments and to return a constant expression.  See
       perlsub for details on these.  The "use constant" pragma is a convenient shorthand for these.

       You can say *foo{PACKAGE} and *foo{NAME} to find out what name and package  the  *foo  symbol
       table  entry  comes  from.   This may be useful in a subroutine that gets passed typeglobs as
       arguments:

           sub identify_typeglob {
               my $glob = shift;
               print 'You gave me ', *{$glob}{PACKAGE},
                   '::', *{$glob}{NAME}, "\n";
           }
           identify_typeglob *foo;
           identify_typeglob *bar::baz;

       This prints

           You gave me main::foo
           You gave me bar::baz

       The *foo{THING} notation can also be used to obtain references to the individual elements  of
       *foo.  See perlref.

       Subroutine  definitions  (and declarations, for that matter) need not necessarily be situated
       in the package whose symbol table they occupy.  You  can  define  a  subroutine  outside  its
       package by explicitly qualifying the name of the subroutine:

           package main;
           sub Some_package::foo { ... }   # &foo defined in Some_package

       This is just a shorthand for a typeglob assignment at compile time:

           BEGIN { *Some_package::foo = sub { ... } }

       and is not the same as writing:

           {
               package Some_package;
               sub foo { ... }
           }

       In  the  first two versions, the body of the subroutine is lexically in the main package, not
       in Some_package. So something like this:

           package main;

           $Some_package::name = "fred";
           $main::name = "barney";

           sub Some_package::foo {
               print "in ", __PACKAGE__, ": \$name is '$name'\n";
           }

           Some_package::foo();

       prints:

           in main: $name is 'barney'

       rather than:

           in Some_package: $name is 'fred'

       This also has implications for the use of the SUPER:: qualifier (see perlobj).

   BEGIN, UNITCHECK, CHECK, INIT and END
       Five specially named code blocks are executed at the beginning and at the end  of  a  running
       Perl program.  These are the "BEGIN", "UNITCHECK", "CHECK", "INIT", and "END" blocks.

       These code blocks can be prefixed with "sub" to give the appearance of a subroutine (although
       this  is  not  considered  good  style).  One should note that these code blocks don't really
       exist as named subroutines (despite their appearance). The thing that gives this away is  the
       fact that you can have more than one of these code blocks in a program, and they will get all
       executed at the appropriate moment.  So you can't execute any of these code blocks by name.

       A  "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  "BEGIN"  blocks  within  a  file (or eval'ed string); they will execute in order of
       definition.  Because a "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  "BEGIN"  has  run,  it is immediately undefined and any code it used is
       returned to Perl's memory pool.

       An "END" code block is executed as late as possible, that is, after perl has finished running
       the program and just before the interpreter is being exited, even  if  it  is  exiting  as  a
       result  of  a  die() function.  (But not if it's morphing into another program via "exec", or
       being blown out of the water by a signal--you have to trap that yourself (if you can).)   You
       may  have  multiple  "END"  blocks  within  a  file--they  will  execute  in reverse order of
       definition; that is: last in, first out (LIFO).  "END" blocks are not executed when  you  run
       perl with the "-c" switch, or if compilation fails.

       Note that "END" code blocks are not executed at the end of a string eval(): if any "END" code
       blocks  are  created  in  a string eval(), they will be executed just as any other "END" code
       block of that package in LIFO order just before the interpreter is being exited.

       Inside an "END" code block, $? contains the value that  the  program  is  going  to  pass  to
       exit().  You can modify $? to change the exit value of the program.  Beware of changing $? by
       accident (e.g. by running something via "system").

       Inside of a "END" block, the value of "${^GLOBAL_PHASE}" will be "END".

       Similar  to  an  "END"  block  are  "defer"  blocks,  though  they operate on the lifetime of
       individual block scopes, rather than the program as a whole. They are documented  in  "defer"
       in perlsyn.

       "UNITCHECK",  "CHECK"  and  "INIT" code blocks are useful to catch the transition between the
       compilation phase and the execution phase of the main program.

       "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 "eval"s, run-
       time  code  compiled  using  the  "(?{ })" construct in a regex, calls to "do FILE", "require
       FILE", and code after the "-e" switch on the command line.

       "BEGIN" and "UNITCHECK" blocks are not directly related to  the  phase  of  the  interpreter.
       They can be created and executed during any phase.

       "CHECK" code blocks are run just after the initial Perl compile phase ends and before the run
       time  begins, in LIFO order.  "CHECK" code blocks are used in the Perl compiler suite to save
       the compiled state of the program.

       Inside of a "CHECK" block, the value of "${^GLOBAL_PHASE}" will be "CHECK".

       "INIT" blocks are run just before the Perl runtime begins execution, in "first in, first out"
       (FIFO) order.

       Inside of an "INIT" block, the value of "${^GLOBAL_PHASE}" will be "INIT".

       The "CHECK" and "INIT" blocks in code compiled by "require", string "do",  or  string  "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 -n and -p switches to Perl, "BEGIN" and "END" work just as they do  in  awk,
       as a degenerate case.  Both "BEGIN" and "CHECK" blocks are run when you use the -c switch for
       a compile-only syntax check, although your main code is not.

       The begincheck program makes it all clear, eventually:

         #!/usr/bin/perl

         # begincheck

         print         "10. Ordinary code runs at runtime.\n";

         END { print   "16.   So this is the end of the tale.\n" }
         INIT { print  " 7. INIT blocks run FIFO just before runtime.\n" }
         UNITCHECK {
           print       " 4.   And therefore before any CHECK blocks.\n"
         }
         CHECK { print " 6.   So this is the sixth line.\n" }

         print         "11.   It runs in order, of course.\n";

         BEGIN { print " 1. BEGIN blocks run FIFO during compilation.\n" }
         END { print   "15.   Read perlmod for the rest of the story.\n" }
         CHECK { print " 5. CHECK blocks run LIFO after all compilation.\n" }
         INIT { print  " 8.   Run this again, using Perl's -c switch.\n" }

         print         "12.   This is anti-obfuscated code.\n";

         END { print   "14. END blocks run LIFO at quitting time.\n" }
         BEGIN { print " 2.   So this line comes out second.\n" }
         UNITCHECK {
          print " 3. UNITCHECK blocks run LIFO after each file is compiled.\n"
         }
         INIT { print  " 9.   You'll see the difference right away.\n" }

         print         "13.   It only _looks_ like it should be confusing.\n";

         __END__

   Perl Classes
       There  is  no  special  class syntax in Perl, but a package may act as a class if it provides
       subroutines to act as methods.  Such a 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 perlootut and perlobj.

   Perl Modules
       A module is just a set of related functions in a library file, i.e., a Perl package with  the
       same  name  as  the  file.   It  is  specifically designed to be reusable by other modules or
       programs.  It may do this by providing a mechanism for exporting some of its symbols into the
       symbol table of any package using it, or it may function as a class definition and  make  its
       semantics  available  implicitly  through  method calls on the class and its objects, without
       explicitly exporting anything.  Or it can do a little of both.

       For example, to start a traditional, non-OO module called Some::Module, create a file  called
       Some/Module.pm and start with this template:

           package Some::Module;  # assumes Some/Module.pm

           use v5.36;

           # Get the import method from Exporter to export functions and
           # variables
           use Exporter 5.57 'import';

           # set the version for version checking
           our $VERSION     = '1.00';

           # Functions and variables which are exported by default
           our @EXPORT      = qw(func1 func2);

           # Functions and variables which can be optionally exported
           our @EXPORT_OK   = qw($Var1 %Hashit func3);

           # exported package globals go here
           our $Var1    = '';
           our %Hashit  = ();

           # non-exported package globals go here
           # (they are still accessible as $Some::Module::stuff)
           our @more    = ();
           our $stuff   = '';

           # 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->();
           my $priv_func = sub {
               ...
           };

           # make all your functions, whether exported or not;
           # remember to put something interesting in the {} stubs
           sub func1      { ... }
           sub func2      { ... }

           # this one isn't always exported, but could be called directly
           # as Some::Module::func3()
           sub func3      { ... }

           END { ... }       # module clean-up code here (global destructor)

           1;  # don't forget to return a true value from the file

       Then  go  on  to declare and use your variables in functions without any qualifications.  See
       Exporter and the perlmodlib for details on mechanics and style issues in module creation.

       Perl modules are included into your program by saying

           use Module;

       or

           use Module LIST;

       This is exactly equivalent to

           BEGIN { require 'Module.pm'; 'Module'->import; }

       or

           BEGIN { require 'Module.pm'; 'Module'->import( LIST ); }

       As a special case

           use Module ();

       is exactly equivalent to

           BEGIN { require 'Module.pm'; }

       All Perl module files have the extension .pm.  The "use" operator assumes this so  you  don't
       have  to  spell out "Module.pm" in quotes.  This also helps to differentiate new modules from
       old .pl and .ph files.  Module names are  also  capitalized  unless  they're  functioning  as
       pragmas;  pragmas  are  in  effect  compiler  directives, and are sometimes called "pragmatic
       modules" (or even "pragmata" if you're a classicist).

       The two statements:

           require SomeModule;
           require "SomeModule.pm";

       differ from each other in two ways.  In the first case, any double colons in the module name,
       such as "Some::Module", are translated into your system's directory separator,  usually  "/".
       The  second case does not, and would have to be specified literally.  The other difference is
       that seeing the first "require" clues in the compiler that uses of indirect  object  notation
       involving "SomeModule", as in "$ob = purge SomeModule", are method calls, not function calls.
       (Yes, this really can make a difference.)

       Because  the  "use"  statement implies a "BEGIN" block, the importing of semantics happens as
       soon as the "use" statement is compiled, before the rest of the file is  compiled.   This  is
       how  it  is  able to function as a pragma mechanism, and also how modules are able to declare
       subroutines that are then visible as list or unary operators for  the  rest  of  the  current
       file.   This will not work if you use "require" instead of "use".  With "require" you can get
       into this problem:

           require Cwd;                # make Cwd:: accessible
           $here = Cwd::getcwd();

           use Cwd;                    # import names from Cwd::
           $here = getcwd();

           require Cwd;                # make Cwd:: accessible
           $here = getcwd();           # oops! no main::getcwd()

       In general, "use Module ()" is recommended  over  "require  Module",  because  it  determines
       module  availability  at  compile  time,  not  in the middle of your program's execution.  An
       exception would be if two modules each tried to "use" each other,  and  each  also  called  a
       function from that other module.  In that case, it's easy to use "require" instead.

       Perl  packages  may  be  nested  inside  other  package  names,  so we can have package names
       containing "::".  But if we used that package name directly as a filename it would  make  for
       unwieldy  or  impossible  filenames  on some systems.  Therefore, if a module's name is, say,
       "Text::Soundex", then its definition is actually found in the library file Text/Soundex.pm.

       Perl modules always have a .pm file, but there may also  be  dynamically  linked  executables
       (often  ending  in .so) or autoloaded subroutine definitions (often ending in .al) associated
       with the module.  If so, these will be entirely transparent to the user of the module.  It is
       the responsibility of  the  .pm  file  to  load  (or  arrange  to  autoload)  any  additional
       functionality.  For example, although the POSIX module happens to do both dynamic loading and
       autoloading, the user can say just "use POSIX" to get it all.

   Making your module threadsafe
       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 "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.8.0  has  support for the "CLONE" special
       subroutine.  In "CLONE" you can do whatever you need to  do,  like  for  example  handle  the
       cloning  of  non-Perl  data, if necessary.  "CLONE" will be called once as a class method for
       every package that has it defined (or inherits it).  It will be called in the context of  the
       new thread, so all modifications are made in the new area.  Currently CLONE is called with no
       parameters  other  than  the invocant package name, but code should not assume that this will
       remain unchanged, as it is likely that in future extra parameters will be passed in  to  give
       more information about the state of cloning.

       If  you  want  to  CLONE all objects you will need to keep track of them per package. This is
       simply done using a hash and Scalar::Util::weaken().

       Perl after 5.8.7  has  support  for  the  "CLONE_SKIP"  special  subroutine.   Like  "CLONE",
       "CLONE_SKIP"  is  called  once per package; however, it is called just before cloning starts,
       and in the context of the parent thread. If it returns a true value, then no objects of  that
       class  will  be  cloned;  or  rather,  they  will  be copied as unblessed, undef values.  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 "sub CLONE_SKIP { 1 }" at the top
       of  the class, and 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.

       Like "CLONE", "CLONE_SKIP" is currently called with no parameters  other  than  the  invocant
       package  name, although that may change. Similarly, to allow for future expansion, the return
       value should be a single 0 or 1 value.

SEE ALSO
       See perlmodlib for general style issues related to building Perl modules and classes, as well
       as descriptions  of  the  standard  library  and  CPAN,  Exporter  for  how  Perl's  standard
       import/export  mechanism  works,  perlootut  and perlobj for in-depth information on creating
       classes, perlobj for a hard-core reference document on objects, perlsub for an explanation of
       functions and scoping, and perlxstut and perlguts for more information on  writing  extension
       modules.

perl v5.38.2                                 2026-08-18                                   PERLMOD(1)
PERLMOD(1) □✕
NAME DESCRIPTION
Is this the document you were after? Packages Symbol Tables BEGIN, UNITCHECK, CHECK, INIT and END Perl Classes Perl Modules Making your module threadsafe
SEE ALSO

Generated by phpman v4.11.2-34-g91cb020 · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-10-05 02:10 @216.73.216.55
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 Transitional!Valid CSS!

^_top_^