Hello,
now I have the complete solution.
1.) pp -p -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(__FILE__);
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";
}
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 also packed.
The solution is complete and I'm happy that I can now pack multiple
scripts into one standalone executable with pp.
Because several steps are needed to achieve this solution, it would be
great when pp would get another option (e.g. --main_script). So pp knows
what is the main script and what are the helper scripts. This would have
the advantage that it is not necessary to add a "main.pl" manually and
so the step of creating a par would not be necessary.
Example: pp -o packed_script --reusable --main_script main_script.pl
helper_script.pl
Feedback is welcome.
Cheers,
Dirk
Am 14.03.2012 22:18, schrieb Dirk Joos:
Hello,
I have most part of the solution. The --reusable option did the trick.
Here how I did it:
pp-o packed_script--reusable main_script.pl
#############################################################
# part in the main_script.pl where the helper script is invoked
#############################################################
my $cmd;
if( defined $ENV{PAR_TEMP} )
{
$cmd = "$0 --par-options --reuse helper_script.pl";
}
else
{
$cmd = "perl helper_script.pl";
}
# execute external command
Problems which still have to be solved. Help is welcome.
1.) helper_script.pl is not part of the packed executable
--> helper_script.pl shall be within the packed executable
2.) needed modules of "helper_script.pl" also have to be part of the
packed executable
The solution is near. I hope you can help me to fix the last two open
points. I'll investigate too and post updates when I know more.
Cheers,
Dirk
Am 14.03.2012 22:04, schrieb Dirk Joos:
--
Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail
gesendet.
------------------------------------------------------------------------
*Von:* Dirk Joos <d...@dirkundsari.de>
*Gesendet:* Wed Mar 14 16:59:39 MEZ 2012
*An:* Roderich Schupp <roderich.sch...@googlemail.com>
*CC:* par@perl.org
*Betreff:* Re: Packing multiple scripts in a standalone executable
with pp
You are right. Using several separately packed scripts would be too
much runtime overhead. And this would lead to several packed files
although I would prefer a single file.
But I discovered the --reusable option of pp. When reading the
documentation I thought that this is exactly what I need.
Of course there are then two variants of the script. A packed one and
a normal one. But one more if statement wouldn't matter.
Am I right? Is the --reusable option of pp possibly the thing I'm
looking for?
Thank you.
Cheers, Dirk
Roderich Schupp <roderich.sch...@googlemail.com> schrieb:
On Wed, Mar 14, 2012 at 13:58, Dirk Joos<d...@dirkundsari.de> wrote:
> And sorry for asking again. Why isn't it planned?
Because... there is no plan (at least I don't have one).
> Don' t you think that this would be an important feature?
No, I don't think so.
> What could be a workaround? Perhaps packing each script separately and
then
> calling the packed stuff instead of using a second perl interpreter?
Sure, if your're willing to accept the runtime overhead.
It also means that you would have two variants of your program -
one when running normaly, the other when running packed.
Cheers, Roderich
--
Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail
gesendet.