Here's a quick, off-the-cuff explanation of exporting/importing:
First, exporting and importing are the same thing; like emigrating/immigrating, it just depends which side you're looking from. :)
Exporting/importing is simply the process of making a link from a symbol (or part of a symbol) in one package to a symbol in another package, so that the symbol can be accessed from either package. For example, if you import CPAN's install method, then CPAN exports it (by using Exporter) with this assignment: (*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}. That actually makes an assignment to the symbol table for the calling package. Assuming $callpkg is main, now main::install and CPAN::install refer to the same subroutine. The \& on the RHS of the assignment means that only the subroutine part of the CPAN::install symbol was duplicated; the scalar, array, hash, and other parts were not. Exporter does separate assignments for each data type, so that only what was asked for is imported.
The reason for exporting/importing is simply to make accessing symbols in other packages easier, by bringing them into your package. Someone using the functional interface to CGI, for example, would have to write out CGI::header(), CGI::start_html(), CGI::param(), etc., for every function, if they couldn't import the methods. | [reply] [Watch: Dir/Any] [d/l] |
Read the Exporter manpage... here's a simple example:
package Ctweten::Export;
use Exporter;
our @ISA = qw(Exporter); # we now inherit from Exporter, namely the im
+port() method
our @EXPORT_OK = qw(this that); # you must ask for these: use Ctweten:
+:Export 'this';
our @EXPORT = qw(other); # exporter by default
sub this { print "Hello\n" }
*that = *other = *this;
In a program, if you want to use this() and other(), you do the following:
<code>
#!/usr/local/bin/perl -w
use strict;
$|++;
use Ctweten::Export qw(this);
other;
this;
that; # this would die under these circumstances.
--
Casey
I am a superhero.
| [reply] [Watch: Dir/Any] [d/l] |