2013-10-13 77 views
2

我不确定导入是否适合使用。我是Perl和Bash的初学者。我已上猛砸一个变量,所以当我这样做:将环境变量导入到Perl

echo $PRDIR 

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

我想导入该字符串的Perl,我不知道如何要做到这一点。我已经试过:

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

而且还

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

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

回答

8

如果你想击将变量导出到环境中,因此对程序访问,您可以使用export内置:

export PRDIR 

里面的Perl,你会使用%ENV哈希然后访问它:

在外壳:

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

另一种解决方案,以直接在Perl使用该变量

$ export PRDIR=foobar 

在Perl中:

#!/usr/bin/perl 

use Modern::Perl; 

use Env qw/PRDIR/; 

say $PRDIR; 
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 "$!"; 
} 

我env.sh与以下内容我的bin文件夹:

export APP_ENV=development 

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