2013-10-13 5 views
2

Я не уверен, что импорт является правильным словом для использования. Я новичок в Perl и Bash. Я установил переменную на Bash, так что, когда я делаю:Импорт переменных среды в Perl

echo $PRDIR 

печатает строку (это имя каталога)

Я хочу, чтобы импортировать эту строку в Perl, и я не знаю, как для этого. Я пробовал:

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

А также

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

, но это не работает (я понимаю, последний, он печатает «0», потому что это возвращаемое значение эха). Я также попытался перенаправить stdout на переменную, но не смог.

ответ

8

Если вы хотите Bash экспортировать переменную в окружающую среду таким образом он доступен для программ, вы можете использовать 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 в моей бен папку с следующим содержанием:

export APP_ENV=development 

Идея такого подхода заключается в том, что мне не нужно беспокоиться, установил ли я свой ENV va riables перед запуском моего кода Perl или забудьте сделать это. Мне нужно просто запустить программу Perl, и она позаботится о подготовке среды для себя.

Смежные вопросы