Perl Tutorials - Herong's Tutorial Examples
Dr. Herong Yang, Version 5.00

"package" Statement - Switching Name Space

This section provides a tutorial example on how to switch name space with the 'package' statement and how to access identifiers from other name space with double colon '::'.

Name Space: A compilation unit used to isolate identifiers from different parts of the source code. Name space is also called package. There are several basic rules about name spaces:

  • There is a default name space called "main". So without any special coding, every line of the source code is in the "main" name space.
  • You can use "package name_space;" statement to exit the current name space, and to enter into a new name space.
  • The current name space ends at the end of the current code block, or end of the current file.
  • Identifiers from an other name space can be accessed by prefixing the identifier with the name space name followed by a double colon, ::.
  • The special symbol __PACKAGE__ contains the name of the current name space.

To verify those rules, I wrote the following program, NameSpaceTest.pl,

#- NameSpaceTest.pl
#- Copyright (c) 1995 by Dr. Herong Yang, http://www.herongyang.com/
#
   $j = "Java";                            # starting with main
   $f = "Fortran";
   $p = "Perl";
   $c = "C++";
   @list = ($j, $f, $p, $c);
   print("\nIn ",__PACKAGE__,"...\n");
   print("list = ",join(', ',@list),"\n"); 

   package Calendar;                       # entering Calendar
   $j = "January";
   $f = "February";
   $m = "March";
   $a = "April";
   @list = ($j, $f, $m, $a);
   print("\nIn ",__PACKAGE__,"...\n");
   print("list = ",join(', ',@list),"\n");

   {
      package Fruit;                       # entering Fruit
      $p = "peach";
      $o = "orange";
      $m = "mango";
      $a = "apple";
      @list = ($p, $o, $m, $a);
      print("\nIn ",__PACKAGE__,"...\n");
      print("list = ",join(', ',@list),"\n");
   }                                       # ending Fruit
                                           # back to Calendar
   print("\nBack in ",__PACKAGE__,"...\n");
   print("list = ",join(', ',@list),"\n");

   package Fruit;                          # entering Fruit
   print("\nBack in ",__PACKAGE__,"...\n");
   print("main::p = ",$main::p,"\n");
   print("Fruit::p = ",$Fruit::p,"\n"); 
   print("list = ",join(', ',@list),"\n");
   print("main::list = ",join(', ',@main::list),"\n");
   print("Calendar::list = ",join(', ',@Calendar::list),"\n");
   exit;

The output matches my expectation:

In main...
list = Java, Fortran, Perl, C++

In Calendar...
list = January, February, March, April

In Fruit...
list = peach, orange, mango, apple

Back in Calendar...
list = January, February, March, April

Back in Fruit...
main::p = Perl
Fruit::p = peach
list = peach, orange, mango, apple
main::list = Java, Fortran, Perl, C++
Calendar::list = January, February, March, April

Sections in This Chapter

Including Script Codes from Other Files

do() Function - Including Script Files

require() Function - Including Script Files

"package" Statement - Switching Name Space

BEGIN(), CHECK(), INIT() and END() Functions

Defining Your Own Perl Module

CalendarModule.pm - A Sample Perl Module

Dr. Herong Yang, updated in 2008
"package" Statement - Switching Name Space