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

Thanks for your hint. And unfortunately you are right. It is not working without an installed perl.

The main script works. But calling the helper script does not work.

Here the error message:

Can't exec "perl": ...

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

I know you recommended the cava packager. But it's always interesting for me to know how it works when I don't get it myself.

Thank you for your help.

Replies are listed 'Best First'.
Re^6: pp and multiple perl scripts
by Anonymous Monk on Mar 09, 2012 at 12:06 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