如何在Perl中运行子命令来正确导入环境?

qed*_*edi 2 environment perl

在从子命令导入环境时,我想将从bash脚本导出的所有环境变量添加到散列中.当program运行时,它将设置一些变量并导出它们.我想将这些变量保存在Perl脚本中以供日后使用.但是我不想采用子命令中定义的bash函数.目前,我有一个块像:

foreach (`program; env`)
{
    next if /^\(\)/;
    my ($a, $b) = split("=", $_);
    if( /^(\w+)=(.*)$/ ) {
        $hash{$1} = $2;    
    }
}
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?我不确定匹配initial()是否安全.用于处理环境变量中的换行符的加分点,我现在只是闭上眼睛.

jej*_*eje 5

你想要的是: Shell-EnvImporter

一个例子:

  use Shell::EnvImporter;

  # Import environment variables exported from a shell script
  my $sourcer  = Shell::EnvImporter->new(
                   file => $filename,
                 );


  my $result = $sourcer->run() or die "Run failed: $@";
Run Code Online (Sandbox Code Playgroud)