NAME
App::FatPacker::Simple::Tutorial - tutorial!
SUMMARY
If you execute fatpack-simple script.pl, then you will get script.fatpack.pl that is the fatpacked script.pl with all modules in lib,fatlib,local,extlib directories. Also note that the all modules are automatically perl-stripped.
TUTORIAL
Let's say you have hello.pl and want to fatpack it. And assume
hello.pluses your modules inlibdirectory:lib/Hello.pm,lib/Hello/CLI.pmexternal cpan module dependencies are declared in
cpanfile
so that you have:
$ find . -type f
./cpanfile
./hello.pl
./lib/Hello/CLI.pm
./lib/Hello.pm
$ cat cpanfile
requires 'Sub::Retry';
requires 'HTTP::Tiny';
Well, fatpack-simple just fatpacks a script with all modules in lib,fatlib,local,extlib, so let's install dependencies to local directory first:
# if you have carton, then:
$ carton install
# or just:
$ cpanm -Llocal -nq --installdeps .
# Oh, HTTP::Tiny is not core module for old perls, so we have to fatpack it too!
$ cpanm --reinstall -Llocal -nq HTTP::Tiny
# Oh, Sub::Retry depends on 'parent' module, so we have to fatpack it too!
$ cpanm --reinstall -Llocal -nq parent
Now the whole dependencies are in lib and local directories, it's time to execute fatpack-simple. However if you use perl 5.20+, then cpanm installed configure deps Module::Build, CPAN::Meta, right? They are not necessary for runtime, so execute fatpack-simple with --exclude option:
$ fatpack-simple --exclude Module::Build,CPAN::Meta hello.pl
-> perl strip Hello.pm
-> perl strip Hello/CLI.pm
-> perl strip parent.pm
-> exclude CPAN/Meta.pm
...
-> perl strip HTTP/Tiny.pm
-> exclude Module/Build.pm
...
-> perl strip Sub/Retry.pm
-> Successfully created hello.fatpack.pl
Finally you get hello.fatpack.pl!