Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^4: pp and multiple perl scripts

by Dirk80 (Pilgrim)
on Mar 08, 2012 at 08:03 UTC ( [id://958440]=note: print w/replies, xml ) Need Help??


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

No, I didn't try it without an installed Perl. You are right. I'll try this evening and post you if it worked.

Replies are listed 'Best First'.
Re^5: pp and multiple perl scripts
by Dirk80 (Pilgrim) on Mar 08, 2012 at 21:44 UTC

    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.

        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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://958440]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2024-04-24 01:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found