When Mark Fowler first covered PAR in 2003, useful though it may have been, it was still quite young and not much more than a linker for modules and scripts. The accompanying pp (now in PAR::Packer) also allowed for the linking of the perl binary, and therefore the distribution of a program as a stand-alone executable. Since then a little noticed1 addition has matured.
PAR::Dist allows one to package modules—any random module, or multiple modules together through merge_par—for redistribution and installation. You can thusly use PARchives as an alternative to RPMs (or whatever your distribution uses), ActiveState's PPMs, or a Bundle::. Some of the benefits of such a scheme are the abilities to compile and test only once for a given platform (potentially saving a lot of time), and to install modules without network access.
An interesting extension to PAR::Dist is PAR::Dist::FromCPAN. Both are usable programatically, but the latter provides the convenient cpan2par wrapper for use from the command line. The results of
$ cpan2par -P Regexp::Keep
are lots of the usual CPAN install spew, some additional messages from PAR::Dist::FromCPAN and finally the PARchive.
$ unzip -t Regexp-Keep-0.02-i386-linux-thread-multi-5.8.0.par Archive: Regexp-Keep-0.02-i386-linux-thread-multi-5.8.0.par testing: lib/ OK testing: lib/Regexp/ OK testing: lib/Regexp/.exists OK testing: lib/Regexp/Keep.pm OK testing: lib/auto/ OK testing: lib/auto/Regexp/ OK testing: lib/auto/Regexp/Keep/ OK testing: lib/auto/Regexp/Keep/.exists OK testing: arch/ OK testing: arch/auto/ OK testing: arch/auto/Regexp/ OK testing: arch/auto/Regexp/Keep/ OK testing: arch/auto/Regexp/Keep/.exists OK testing: arch/auto/Regexp/Keep/Keep.so OK testing: arch/auto/Regexp/Keep/Keep.bs OK testing: man3/ OK testing: man3/.exists OK testing: man3/Regexp::Keep.3pm OK testing: MANIFEST OK testing: META.yml OK No errors detected in compressed data of Regexp-Keep-0.02-i386-linux-thread-multi-5.8.0.par.
(Un)fortunately, PAR::Dist::install_par does not seem to check that the archive platform/perl version matches/is appropriate for the target system. On the one hand, this means you can install PARchives containing XS modules on sufficiently similar setups without a hitch. On the other hand, it gives you enough rope to yank out your tooth. I was able to install_par the PARchive above on a Solaris box, though clearly not use it.
Note: If you happen to encounter the PARchive build error with v.04:No such file or directory at …/PAR/Dist.pm line 249All may not be lost, see this RT ticket.