2009-11-17 67 views
15

如何在Perl中设置环境变量?如何在Perl中设置环境变量?

我想将$HOME设置为与默认不同的目录。

+0

无关紧要,因为这个问题不是关于在子进程的父进程中设置环境变量。 – mob 2017-06-23 22:45:29

回答

34

你可以这样说:

$ENV{HOME} = 'something different'; 

但请注意,这只会有你的脚本的其余部分中的作用。当您的脚本退出时,the calling shell will not see any changes

由于perldoc -v %ENV说:

%ENV哈希%ENV包含当前的环境。在“ENV”中设置值会更改后续“fork()”关闭的任何子进程的环境。

1

当perl的得到启动它使自己的子壳。该子外壳不包含所有功能,例如只提供主外壳可用的外壳文件。您无法为主外壳设置任何环境路径。 如果你有一个你想要访问你的路径的shell文件,你可以做一件事,你可以在你的代码中使用它。

您可以通过安装来自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的shell运行时创建它自己的实例,所以我们不能设置环境路径,主壳作为Perl的实例会像主壳的子壳。子进程不能为父母设置环境路径。

现在直到Perl的子壳运行,你就可以访问您temp.csh所有在场的路径

-2

这是不好的,但你可以使用系统调用一个VBS脚本(“CSCRIPT your_vbs_script”)让它处理环境变量分配。它将存在于下一个打开的shell中,而不是在这种情况下运行的shell。