2.7 Packages as Namespace SeparatorsIf the name prefix of the last example didn't have to be spelled out on every use, things would work much better. Well, you can improve the situation by using a package: package Navigation; The package declaration at the beginning of this file tells Perl to insert Navigation:: in front of most names within the file: Thus, the code above practically says: sub Navigation::turn_towards_heading {Now when Gilligan uses this file, he simply adds Navigation:: to the subroutines defined in the library, and leaves the Navigation:: prefix off for subroutines he defines on his own: #!/usr/bin/perl Package names are like variable names: they consist of alphanumerics and underscores, as long as you don't begin with a digit. Also, for reasons explained in the perlmodlib documentation, a package name should begin with a capital letter and not overlap an existing CPAN or core module name. Package names can also consist of multiple names separated by double colons, such as Minnow::Navigation and Minnow::Food::Storage.Nearly every scalar, array, hash, subroutine, and filehandle name[9] is actually prefixed by the current package, unless the name already contains one or more double-colon markers.[9] Except lexicals, as you'll see in a moment. So, in navigation.pl, you can use variables such as: package Navigation; (Trivia note: 21.1 degrees north, 157.525 degrees west is the location of the real-life marina where the opening shot of a famous television series was filmed.)You can refer to the @homeport variable in the main code as: @destination = @Navigation::homeport; If every name has a package name inserted in front of it, what about names in the main program? Yes, they are also in a package, called main. It's as if package main; were at the beginning of each file. Thus, to keep Gilligan from having to say Navigation::turn_towards_heading, the navigation.pl file can say: sub main::turn_towards_heading {Now the subroutine is defined in the main package, not the Navigation package. This isn't an optimal solution (you'll see better solutions in Chapter 12), but at least there's nothing sacred or terribly unique about main compared to any other package. |
•
Table of Contents
•
Index
•
Reviews
•
Reader Reviews
•
Errata
Learning Perl Objects, References & Modules
By
Randal L. Schwartz