Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

pp and multiple perl scripts

by Dirk80 (Monk)
on Mar 06, 2012 at 17:31 UTC ( #958125=perlquestion: print w/replies, xml ) Need Help??
Dirk80 has asked for the wisdom of the Perl Monks concerning the following question:

Hello wise monks,

I have written several command line perl scripts which I now want to call from a TK GUI. Because it are long jobs and I don't want to have a blocking GUI, I decided the following:

I have a main script which contains the TK GUI. This main script is then calling the other scripts by using inter process communication (fileevent functionality in TK) when the user presses a button. I call these other scripts helper scripts.

Of course I know with the help of you that it would be also possible to do this with threads when I'm very careful. But I think I prefer the way of IPC now. Is this design ok, or is it a bad idea to do it like this? What would be the alternatives?

But now to my main problem. Usually I pack my script with pp into a standalone executable to be able to deploy it. But now I want to pack not only my main script into a standalone executable, but also my helper scripts with all their dependencies.

Here my trials:

  1. pp -o standalone.exe

    Problem is here that it is not possible to call "standalone.exe" without an argument because it does not know what is the "main script".

  2. pp -a -o standalone.exe

    Problem is here that the dependencies of the "" are not packed into the "standalone.exe".

Then I tried it with "-M". This option usually checks the dependencies and adds them, but not if the suffix is ".pl".

What is a good way to solve this problem with pp?

Thank you a lot for your help!




SOLUTION is posted here:

Replies are listed 'Best First'.
Re: pp and multiple perl scripts
by Anonymous Monk on Mar 06, 2012 at 18:06 UTC

      Thanks for your post. I'll give the cava packager a try.

      But fortunately I found a solution to this pp challenge myself.

      1. Create par consisting of main_script and its helper scripts with all their dependencies:

        pp -p -o perl_app.par
      2. Open perl_app.par with an archive program and add to the /script folder a file.

        if (defined $ENV{PAR_APP_REUSE}) { warn "Executable was created without the --reusable option. See 'p +erldoc pp'.\n"; exit(1); } my $zip = $PAR::LibCache{$ENV{PAR_PROGNAME}} || Archive::Zip->new(__FI +LE__); my $member = eval { $zip->memberNamed('script/') } or die qq( Can't open perl script "script/main_script. +pl": No such file or directory ($zip)); PAR::_run_member($member, 1);
      3. Create perl_app.exe as follows:

        pp -o perl_app.exe perl_app.par

      In the main_script you can then call the helper_scripts as follows (example with

      my $cmd; if ( defined $ENV{PAR_TEMP} ) { $cmd = "perl $ENV{PAR_TEMP}/inc/script/"; } else { $cmd = "perl"; } # execute cmd
        Did you try that without an installed perl?

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://958125]
Approved by Old_Gray_Bear
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (5)
As of 2018-07-20 02:51 GMT
Find Nodes?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?

    Results (422 votes). Check out past polls.