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

19

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

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


这个回答解决了你的问题吗?通过Perl脚本设置环境变量 - imz -- Ivan Zakharyaschev
5个回答

38

你可以这样做:

$ENV{HOME} = 'something different';

请注意,这只会在您的脚本余下的部分中起作用。当您的脚本退出时,调用的 shell 将看不到任何更改

正如perldoc -v %ENV所说:

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


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

Also see perlrun


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中存在的所有路径。

1
如果您需要设置一个环境变量,以便被导入的另一个Perl模块看到,那么您需要在BEGIN块中这样做。
例如,如果您使用DBI(或另一个依赖于它的模块,如Mojo::Pg),并且想要在脚本中设置DBI_TRACE环境变量:
use DBI;
BEGIN {
   $ENV{DBI_TRACE}='SQL';
}

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


-3

这听起来有点俗套,但你可以使用 system("cscript your_vbs_script") 调用一个 VBS 脚本来处理环境变量赋值。这样它将存在于下一个打开的 shell 中,而不是当前正在运行的 shell 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接