http://qs1969.pair.com?node_id=958696


in reply to Re^5: pp and multiple perl scripts
in thread pp and multiple perl scripts

Do you have an idea why it does not know the "perl" command within the par packed executable when perl is not installed?

:) Um, because perl is not installed, its nowhere in the %PATH%, duh :p

Maybe you'd like to pack perl.exe (or parl.exe) as well? Depending on the kind of perl binary you have, that might be against the license (ActiveState)

update: I wouldn't recommend attempting it, you'll waste an hour and get nowhere

Also, see my links in Pack multiple scripts in executables with one shared core dll follow deep, and you'll know more. Same for these similar links

Replies are listed 'Best First'.
Solution - pp and multiple perl scripts
by Dirk80 (Pilgrim) on Mar 14, 2012 at 22:11 UTC

    Hello,

    thank you for all your links. They were very interesting. In the meantime I tried cava packager which is also a good packaging tool.

    But I like it to solve problems. And I like the one file concept of pp and so I did not give up. And now I have found the complete solution.

    1. pp -p -B -o packed_script.par main_script.pl helper_script.pl
    2. Add the file "main.pl" to "packed_script.par" in the script folder where now also are "main_script.pl" and "helper_script.pl".

      main.pl

      if (defined $ENV{PAR_APP_REUSE}) { my $filename = $ENV{PAR_APP_REUSE}; delete $ENV{PAR_APP_REUSE}; $ENV{PAR_0} = $filename; PAR::_run_external_file($filename, 1); exit(); } my $zip = $PAR::LibCache{$ENV{PAR_PROGNAME}} || Archive::Zip->new(__FI +LE__); my $member = eval { $zip->memberNamed('script/main_script.pl') } or die qq(main.pl: Can't open perl script "script/main_script. +pl": No such file or directory ($zip)); PAR::_run_member($member, 1);
    3. pp -o  packed_script --reusable packed_script.par

    Here how to call the external helper script from the main script:

    ############################################################# # part in the main_script.pl where the helper script is invoked ############################################################# my $cmd; if( defined $ENV{PAR_TEMP} ) { $cmd = "$0 --par-options --reuse $ENV{PAR_TEMP}/inc/script/helper_ +script.pl"; } else { $cmd = "perl helper_script.pl"; } # invoke cmd

    Now the main script and another external script "helper_script.pl" are packed in one standalone executable. It is running without the need of a perl installation. And all needed modules are packed.

    Feedback to this solution is welcome.

    Cheers, Dirk