将环境变量导入Perl

时间:2013-10-13 19:15:12

标签: perl bash import

我不确定导入是否是正确的用词。我是Perl和Bash的初学者。我在Bash上设置了一个变量,所以当我这样做时:

echo $PRDIR

它打印一个字符串(它是一个目录名)

我想将该字符串导入Perl,我不知道该怎么做。我试过了:

$varex = system("$PRDIR");
print "$varex";

$varex = system("echo $PRDIR");
print "$varex";

但是这不起作用(我理解最后一个,它打印“0”因为那是echo的返回值)。我也尝试将stdout重定向到变量,但我不能。

3 个答案:

答案 0 :(得分:8)

如果您希望Bash将变量导出到环境中以便程序可以访问它,您可以使用export内置:

export PRDIR

在Perl中,您可以使用%ENV哈希访问它:

my $varex = $ENV{"PRDIR"};
print "\$varex is: $varex\n";

答案 1 :(得分:2)

在perl中直接使用变量的另一种解决方案:

在shell中:

$ export PRDIR=foobar

在perl:

#!/usr/bin/perl

use Modern::Perl;

use Env qw/PRDIR/;

say $PRDIR;

答案 2 :(得分:1)

我猜你需要这样的东西:

use Cwd 'abs_path';
use File::Basename;
my $self = abs_path($0);
my $bindir = dirname( abs_path($0) );
unless ($ENV{APP_ENV}) {
    warn "No APP_ENV, will try to get from bin/env.sh";
    exec("source $bindir/env.sh && /usr/bin/perl $self") || die "$!";
}

我的bin文件夹中有env.sh,内容如下:

export APP_ENV=development

这种方法背后的想法是,如果我在运行Perl代码之前设置我的ENV变量或忘记这样做,我就不需要打扰了。我只需要运行我的Perl程序,它就会为自己准备环境。