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

如何在Perl中设置环境变量?,perl,environment-variables,Perl,Environment Variables,如何在Perl中设置环境变量 我想将$HOME设置为与默认目录不同的目录。您可以这样做: $ENV{HOME} = 'something different'; 但请注意,这只会对脚本的其余部分产生影响。当脚本退出时 正如perldoc-v%ENV所说: %ENV哈希%ENV包含当前环境。在“ENV”中设置一个值会更改您随后关闭的所有子进程的环境“fork()” 另请参见当perl开始使用时,它会创建自己的子shell。该子shell不包含仅适用于主shell的所有功能,如源化shell文件。

如何在Perl中设置环境变量


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

您可以这样做:

$ENV{HOME} = 'something different';
但请注意,这只会对脚本的其余部分产生影响。当脚本退出时

正如
perldoc-v%ENV
所说:

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


另请参见

当perl开始使用时,它会创建自己的子shell。该子shell不包含仅适用于主shell的所有功能,如源化shell文件。不能为主shell设置任何环境路径。 您可以做一件事,如果您有一个shell文件,您可以在代码中使用它来访问您的路径

您可以通过从CPAN安装外部模块来实现这一点,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中存在的所有路径,这很简单,但是您可以使用系统调用VBS脚本(“cscript your_VBS_script”),让它处理环境变量赋值。它将存在于打开的下一个shell中,而不是在这种情况下运行的shell。

如果需要设置一个环境变量以供导入的另一个Perl模块查看,则需要在
开始
块中进行设置

例如,如果
使用
ing DBI(或依赖于它的另一个模块,如Mojo::Pg),并且希望在脚本中设置
DBI_TRACE
环境变量:

use DBI;
BEGIN {
   $ENV{DBI_TRACE}='SQL';
}
如果不将其放入
BEGIN
块,脚本将看到环境变量,但在设置环境变量之前,
DBI
将已经导入

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