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

时间:2009-11-17 10:04:17

标签: perl environment-variables

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

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

5 个答案:

答案 0 :(得分:36)

你可以这样做:

$ENV{HOME} = 'something different';

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

正如perldoc -v %ENV所说:

  

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

答案 1 :(得分:8)

$ENV{'HOME'} = '/path/to/new/home';

另见perlrun

答案 2 :(得分:1)

当perl启动时,它会使自己的子shell。该子shell不包含所有功能,例如源shell文件,仅适用于主shell。您无法为主shell设置任何环境路径。 如果您有一个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上运行时会创建自己的实例,因此我们无法为主shell设置环境路径,因为perl的实例将类似于主shell的子shell。子进程无法为父项设置环境路径。

现在直到perl的子shell运行,你将能够访问temp.csh中存在的所有路径

答案 3 :(得分:0)

如果您需要设置一个环境变量以供导入的另一个Perl模块查看,那么您需要在BEGIN块中进行设置。

例如,如果use正在使用DBI(或依赖它的另一个模块,例如Mojo :: Pg),而您想在脚本中设置DBI_TRACE环境变量:

use DBI;
BEGIN {
   $ENV{DBI_TRACE}='SQL';
}

如果不将其放在BEGIN块中,您的脚本将看到环境变量,但是DBI在您之前 已被导入设置环境变量。

答案 4 :(得分:-2)

这很俗气,但您可以使用系统(“cscript your_vbs_script”)调用VBS脚本来让它处理环境变量赋值。它将在下一个打开的shell中存在,而不是在这种情况下运行的shell。