我不确定为什么这不起作用,但也许我过度简化/过于复杂的事情
我正在编写一个最终需要调用外部程序的Perl脚本。问题是,该程序需要LD_LIBRARY_PATH
环境变量的修改版本,以便找到供应商未在标准位置安装的几个库。
好的,环境在%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
的内容。
答案 0 :(得分:1)
eval {
$output = capturex(
$config->rsq(),
qq/"$source"/
);
};
问题在于:我没有检查$@
中的内容(如果$EVAL_ERR
,则为use ENGLISH;
)
如果我有,我会看到问题出在引用qq/"$source"/
上 - 因为capturex()
不调用shell(这是所需的行为)引号会破坏文件名(即test.pdf
存在,但""test.pdf""
不存在)。