2009-11-17 2 views
15

Как установить переменную окружения в Perl?Как установить переменную среды в Perl?

Я хочу установить $HOME в другую директорию, чем по умолчанию.

+0

Un-duped, потому что этот вопрос не связан с установкой переменной среды в родительском процессе из дочернего элемента. – mob

ответ

34

Вы можете сделать это следующим образом:

$ENV{HOME} = 'something different'; 

Но обратите внимание, что это будет иметь эффект только в пределах остальной части вашего сценария. Когда ваш скрипт выходит, the calling shell will not see any changes.

Как perldoc -v %ENV говорит:

%ENV Хэш %ENV содержит текущую среду. Установка значения в «ENV» изменяет среду для любых дочерних процессов, которые вы впоследствии «fork()» выключены.

1

Когда Perl запускается это делает его собственный суб оболочку. Эта вспомогательная оболочка не содержит всех функций, таких как поиск файла оболочки, доступного только для основных оболочек. Вы не можете установить какой-либо путь среды для своей основной оболочки. Вы можете сделать одно, если у вас есть файл оболочки, откуда вы хотите получить доступ к своим путям, которые вы можете использовать в своем коде.

Вы можете сделать это, установив внешний модуль из CPAN, который является Shell :: Source.

$env_path= Shell::Source->new(shell=>"tcsh",file=>"../path/to/file/temp.csh"); 
$env_path->inherit; 
print "Your env path: $ENV{HOME}"; 

В Perl создает свой собственный экземпляр во время работы на оболочке, поэтому мы не можем установить путь среды для основной оболочки, как например в PERL будет как к югу от оболочки основного корпуса. Детский процесс не может устанавливать пути для родителей.

Теперь до суб оболочки на языке Perl будет работать, вы сможете получить доступ ко всем пути, присутствующие в вашем temp.csh

-2

Это сырный, но вы могли бы назвать VBS скрипт, используя систему («Cscript your_vbs_script») чтобы он обрабатывал назначение переменной среды. Он будет существовать для следующей оболочки, открытой, а не запущенной оболочки в этом случае.

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