|
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
|