Modules are included with use, a compiler directive. The extension .pm stands for perl module.
The package command switches between the packages (symbol tables).
Default package: $::
or $main::
. The main symbol table
is called %main::
.
Packages may be nested: $OUTER::INNER:var
.
#!/usr/bin/perl sub sub1{ print "this is main::sub1 \n"; } sub sub2{ print "this is main::sub2 \n"; } use Tmodule qw( sub1 ); sub1(); sub2();
The module file contains:
#!/usr/bin/perl package Tmodule; require Exporter; @ISA = qw( Exporter); @EXPORT = qw( sub1 sub2); @EXPORT_OK = qw( $tvar ); sub sub1{ print "this is Tmodule::sub1 \n"; } sub sub2{ print "this is Tmodule::sub2 \n"; } $tvar = "12"; return 1;
The following output is generated:
this is Tmodule::sub1 this is main::sub2
Note that Tmodule::sub2 is exported but not mentioned in the use command. That's why the corresponding routine from main is executed.
require is executed at run-time. Routines from the
required package have to be fully qualified, e.g.:
Tmodule::sub1()
.
The function AUTOLOAD is called for all unresolved references:
sub AUTOLOAD { my $program = $AUTOLOAD; $program =~ s/.*:://; system( $program, @_); } date(); who( 'am', 'i'); ls( '-1');