在Perl中修改子进程的环境

时间:2015-04-21 23:37:32

标签: linux perl ipc

我不确定为什么这不起作用,但也许我过度简化/过于复杂的事情

我正在编写一个最终需要调用外部程序的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的内容。

1 个答案:

答案 0 :(得分:1)

    eval {
      $output = capturex(
        $config->rsq(),
        qq/"$source"/
      );
    };

问题在于:我没有检查$@中的内容(如果$EVAL_ERR,则为use ENGLISH;

如果我有,我会看到问题出在引用qq/"$source"/上 - 因为capturex() 调用shell(这是所需的行为)引号会破坏文件名(即test.pdf存在,但""test.pdf""不存在)。