pp(PAR)在哪里解压缩添加(-a)文件?

这是我试图解决引起的无关问题的尝试:“为什么我的系统调用在用pp包装的Perl程序中不起作用?”

我在Linux系统上创建了一个简单的Perl脚本:

new-net:~/scripts # cat ls_test.pl

@ls_out = `ls -l`;

map { print "$_\n" } @ls_out;

$out = `sh out_test.sh`;

print "$out\n";

该脚本调用一个简单的外壳文件:

new-net:~/scripts # cat out_test.sh

echo "I'm here"

我使用pp将Perl脚本和Shell脚本打包到ls_test中:

new-net:〜/ test#解压-l ls_test

存档:ls_test

长度日期时间名称

-------- ---- ---- ----

0 07-13-09 16:41脚本/

436 07-13-09 16:41清单

214 07-13-09 16:41 META.yml

93 07-13-09 16:41脚本/ls_test.pl

538 07-13-09 16:41脚本/main.pl

16 07-13-09 16:20 out_test.sh

-------- -------

1297 6档案

如果我在原本为空的目录中运行打包文件,则找不到shell脚本:

新网:〜/ test#./ls_test

总计3391

-rwxr-xr-x 1根根3466177 7月13日16:41 ls_test

sh:out_test.sh:没有这样的文件或目录

如果将外壳程序脚本复制到目录中,则打包的脚本将按预期运行:

新网:〜/ test#./ls_test

总计3395

-rwxr-xr-x 1根根3466177 7月13日16:41 ls_test

-rw-r--r-- 1个根root 13 Jul 13 16:20 out_test.sh

我在这

那么,pp打包脚本希望在哪里找到包含的文件?以及如何在原始Perl脚本中配置对该包含文件的调用?

回答:

打包的可执行文件中的文件被提取到一个临时目录(通常是/ tmp / par-USERNAME / cache-

XXXXXXX)。要访问这些文件,请执行以下操作:

#!/usr/bin/perl

# Reads a data file from the archive (added with -a)

print PAR::read_file("data");

# Will execute "script2" in the archive and exit. Will not return to this script.

require PAR;

PAR->import( { file => $0, run => 'script2' } );

您还可以建立与可执行文件具有相同名称的可执行文件的符号链接,然后运行它们。

实际上,重读您的问题,仅访问PAR_TEMP环境变量可能更有用:

#!/usr/bin/perl

use File::Slurp qw(slurp);

$data_dir = "$ENV{PAR_TEMP}/inc";

$script_dir = "$data_dir/script";

print slurp("$data_dir/datafile");

# file access permissions are not preserved as far as I can tell,

# so you'll have to invoke the interpreter explicitly.

system 'perl', "$script_dir/script2", @args;

以上是 pp(PAR)在哪里解压缩添加(-a)文件? 的全部内容, 来源链接: utcz.com/qa/415992.html

回到顶部