Herong's Tutorial Notes on Perl - Part A
Dr. Herong Yang, Version 4.09

perlmod - Perl Modules

Part:   1  2   3  4 

(Continued from previous part...)

The calling program, IncRequireTest.pl,

#- IncRequireTest.pl
#- Copyright (c) 1995 by Dr. Herong Yang
#
   print("\nTesting require()...\n");
   require("MyRequireLib.inc");
   require("MyRequireLib.inc");
   print("Author = $author\n");
   &myRequireSub();

   print("\nTesting do()...\n");
   do("MyDoLib.inc");
   do("MyDoLib.inc");
   print("Author = $author\n");
   &myDoSub();
   exit;

The output matches my expectation. The second require() call didn't do any execution.

Testing require()...
Printing from MyRequireLib.inc...
Author = Dr. Herong Yang
Printing from myRequireSub()...

Testing do()...
Printing from MyDoLib.inc...
Printing from MyDoLib.inc...
Author = Herong Yang
Printing from myDoSub()...

Using "package" to Create New Name Spaces

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;" to exit the current name space, and to enter into the specified 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, PackageTest.pl,

#- NameSpaceTest.pl
#- Copyright (c) 1995 by Dr. Herong Yang
#
   $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

(Continued on next part...)

Part:   1  2   3  4 

Dr. Herong Yang, updated in 2006
Herong's Tutorial Notes on Perl - Part A - perlmod - Perl Modules