我不确定为什么这不起作用,但也许我把事情过于简单化/过于复杂了
我正在编写最终需要调用外部程序的 Perl 脚本。问题是,该程序需要 LD_LIBRARY_PATH
环境变量的修改版本,以便找到供应商未在标准位置安装的几个库。
OK,环境在%ENV
,可以重写,是吗?
我想如果我在父级中更改LD_LIBRARY_PATH
,它会影响子级的动态链接。
所以我有:
use Env qw(@LD_LIBRARY_PATH);
use IPC::System::Simple qw(capturex $EXITVAL);
# We need these to establish the call to rsq later
my ($rsqexe, $rsqhome, $suffix) = fileparse($config->rsq());
push @LD_LIBRARY_PATH, $rsqhome;
eval {
$output = capturex(
$config->rsq(),
qq/"$source"/
);
};
但子进程因错误提示无法找到共享库而终止。
我该如何改进?
我确实需要在成功执行后检查 $output
的内容。
最佳答案
eval {
$output = capturex(
$config->rsq(),
qq/"$source"/
);
};
这就是问题所在:我没有检查 $@
中的内容(或者 $EVAL_ERR
如果您使用 ENGLISH;
)
如果有的话,我会发现问题出在引用 qq/"$source"/
- 因为 capturex()
没有 调用 shell(这是期望的行为)引号打破文件名(即 test.pdf
存在,但 ""test.pdf""
确实存在不是)。
关于linux - 在 Perl 中修改子进程的环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29785073/