...Mea Culpa, Mea Culpa, Mea Maxima Culpa!. :-)
I quite liked you description :)
So here is the
zentara package/module tutorial
a package (ZenTara) is inlined with the main source code
zen-pack.pl
#!/usr/bin/perl --
use strict; use warnings;
ZenTara::hello();
ZenTara::goodbye();
exit( 0 );
package ZenTara;
sub hello { print "\nHello\n"; }
sub ZenTara::goodbye { print "\nGoodbye\n" }
a module is when you put the package into a separate file
ZenTara.pm , save in current directory or in ... site/lib/ZenTara.pm
package ZenTara;
use strict; use warnings;
sub hello { print "\nHello\n"; }
sub ZenTara::goodbye { print "\nGoodbye\n" }
1; ## return true
zen-mod.pl is the perl program that does not inline but instead uses ZenTara
#!/usr/bin/perl --
use strict; use warnings;
use ZenTara;
ZenTara::hello();
ZenTara::goodbye();
exit( 0 );
less typing by importing functions from ZenTaraE; also making objects
zen-mod-exp.pl imports hello/goodbye from ZenTaraE, also creates an object
#!/usr/bin/perl --
use strict; use warnings;
use ZenTaraE;
hello();
ZenTaraE->new( name => "Bob" )->goodbye();
exit( 0 );
ZenTaraE.pm uses Exporter to export hello/goodbye by default, and has object constructor "new"
package ZenTaraE;
use strict; use warnings;
require Exporter;
our @ISA = qw/ Exporter /;
our @EXPORT = qw/ hello goodbye /; # exported by default
sub new {
my $class = shift;
return bless { @_ }, $class;
}
sub hello { print "\nHello\n"; }
sub goodbye {
my( $self ) = @_;
my $name = eval { $self->{name} } || '';
print "\nGoodbye $name\n"
}
1; ## return true
rip modules apart and insert them directly into your script
zen-mod-exp-inlined.pl inlining comes first before main program with %INC trick to make ZenTaraEI useable
#!/usr/bin/perl --
BEGIN {
$INC{'ZenTaraEI.pm'} = __FILE__;
package ZenTaraEI;
use strict; use warnings;
require Exporter;
our @ISA = qw/ Exporter /;
our @EXPORT = qw/ hello goodbye /; # exported by default
sub new {
my $class = shift;
return bless { @_ }, $class;
}
sub hello { print "\nHello\n"; }
sub goodbye {
my( $self ) = @_;
my $name = eval { $self->{name} } || '';
print "\nGoodbye $name\n"
}
1; ## return true
}##########
use strict; use warnings;
use ZenTaraEI;
hello();
ZenTaraEI->new( name => "Bob" )->goodbye();
exit( 0 );
exit( 0 );
$ perl zen-pack.pl
Hello
Goodbye
$ perl zen-mod.pl
Hello
Goodbye
$ perl zen-mod-exp.pl
Hello
Goodbye Bob
$ perl zen-mod-exp-inlined.pl
Hello
Goodbye Bob
$
For more info see Simple Module Tutorial and perlmod
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.