2

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

echo $PRDIR

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

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

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

并且

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

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

4

3 回答 3

8

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

export PRDIR

在 Perl 中,您将使用%ENV散列访问它:

my $varex = $ENV{"PRDIR"};
print "\$varex is: $varex\n";
于 2013-10-13T19:22:55.730 回答
2

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

在外壳中:

$ export PRDIR=foobar

在 perl 中:

#!/usr/bin/perl

use Modern::Perl;

use Env qw/PRDIR/;

say $PRDIR;
于 2013-10-13T19:30:41.920 回答
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 程序,它就会为自己准备环境。

于 2015-06-27T00:53:46.007 回答