PAR - Perl Archive
This document describes version 0.11 of PAR, released October 20, 2002.
(If you want to make an executable that contains all module, scripts and data files, please consult par.pl instead.)
Following examples assume a foo.par file in Zip format; support for compressed gzip (*.tgz) format is under consideration.
To use Hello.pm, lib/Hello.pm, lib/arch/Hello.pm or lib/$Config{archname}/Hello.pm from ./foo.par:
% perl -MPAR=./foo.par -MHello % perl -MPAR=./foo -MHello # the .par part is optional
Same thing, but search foo.par in the @INC;
@INC
% perl -MPAR -Ifoo.par -MHello % perl -MPAR -Ifoo -MHello # ditto
Run test.pl or script/test.pl from foo.par:
% perl -MPAR foo.par test.pl # only when $0 ends in '.par'
However, if the .par archive contains either main.pl or script/main.pl, then it is used instead:
% perl -MPAR foo.par test.pl # runs main.pl, with 'test.pl' as @ARGV
Use in a program:
use PAR 'foo.par'; use Hello; # reads within foo.par # PAR::read_file() returns a file inside any loaded PARs my $conf = PAR::read_file('data/MyConfig.yaml'); # PAR::par_handle() returns an Archive::Zip handle my $zip = PAR::par_handle('foo.par') my $src = $zip->memberNamed('lib/Hello.pm')->contents;
This module let you easily bundle a typical blib/ tree into a zip file, called a Perl Archive, or PAR.
PAR
To generate a .par file, all you have to do is compress the modules under arch/ and lib/, e.g.:
% perl Makefile.PL % make % cd blib % zip -r mymodule.par arch/ lib/
Afterwards, you can just use mymodule.par anywhere in your @INC, use PAR, and it will Just Work.
For maximal convenience, you can set the PERL5OPT environment variable to -MPAR to enable PAR processing globally (the overhead is small if not used), or to -MPAR=/path/to/mylib.par to load a specific PAR file. Alternatively, consider using the par.pl utility bundled with this module.
PERL5OPT
-MPAR
-MPAR=/path/to/mylib.par
Please see "SYNOPSIS" for most typical use cases.
For Perl versions without PerlIO support, the IO::Scalar module is needed to support __DATA__ sections in script and modules inside a PAR file.
__DATA__
If you choose to compile script/par.pl with perlcc, it will automatically include the correct module (PerlIO::scalar or IO::Scalar) if you have it installed.
Since version 0.10, this module supports loading XS modules by overriding DynaLoader boostrapping methods; it writes shared object file to a temporary file at the time it is needed, and removes it when the program terminates. Currently there are no plans to leave them around for the next time, but if you need the functionality, just mail me. ;-)
par.pl
Archive::Zip, "require" in perlfunc
ex::lib::zip, Acme::use::strict::with::pride
PerlIO::scalar, IO::Scalar
Nicholas Clark for pointing out the mad source filter hook within the (also mad) coderef @INC hook.
Ton Hospel for convincing me to ditch the Filter::Simple implementation.
Filter::Simple
Uri Guttman for suggesting read_file and par_handle interfaces.
read_file
par_handle
Antti Lankila for making me implement the self-contained executable options via par.pl -O.
par.pl -O
Autrijus Tang <autrijus@autrijus.org>
Copyright 2002 by Autrijus Tang <autrijus@autrijus.org>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://www.perl.com/perl/misc/Artistic.html
To install PAR, copy and paste the appropriate command in to your terminal.
cpanm
cpanm PAR
CPAN shell
perl -MCPAN -e shell install PAR
For more information on module installation, please visit the detailed CPAN module installation guide.