Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^6: pp and multiple perl scripts

by Anonymous Monk
on Mar 09, 2012 at 12:06 UTC ( #958696=note: print w/ replies, xml ) Need Help??


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


Comment on Re^6: pp and multiple perl scripts
Solution - pp and multiple perl scripts
by Dirk80 (Monk) 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

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://958696]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (12)
As of 2014-07-28 10:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (196 votes), past polls