在Windows中访问Perl环境(shell)变量 - $ ENV无法正常工作

时间:2017-02-13 19:35:28

标签: windows perl shell git-bash activeperl

问题

我在SO帖子中找到了如何使用Windows环境变量(例如%AppData%%HomePath%%SystemRoot%等):

Getting the path of %AppData% in perl script

以下是选择作为正确答案的代码段:

 #!/usr/bin/perl

 use warnings;
 use strict;

 my $localConfPath = $ENV{localappdata};
 my $appdata = $ENV{appdata}; 

 print $localConfPath;  #will print the app path - C:\users\xxx\AppData\local
 print $appdata; #prints - C:\users\xxx\AppData\Roaming

但是,出于某种原因,我的代码无法在我的机器上运行。我的脚本在没有shebang(#!)行的情况下工作,所以无论是否使用它都尝试了脚本,但无济于事。

我的设置

我使用GitBash附带的Perl,如果这有所不同。

我尝试了什么

我尝试了一个简单的Perl命令行执行:

perl -e 'print %ENV{AppData}';

这没有用。我也尝试了以下替代方案:

perl -e 'print %ENV{APPDATA}';
perl -e 'print %ENV{appdata}';

这也没有用。这是我得到的错误(所有3个版本都一样):

syntax error at -e line 1, near "%ENV{AppData"
Execution of -e aborted due to compilation errors.

我甚至尝试使用我在其自己的文件中提到的SO帖子中的代码。那段代码也不起作用。使用帖子中的代码我收到此错误:

$ perl /c/Users/User1/Desktop/ehCode_testingWindowsEnvironmentVariables_01.pl
Use of uninitialized value in print at /c/Users/User1/Desktop/ehCode_testingWindowsEnvironmentVariables_01.pl line 7.
Use of uninitialized value in print at /c/Users/User1/Desktop/ehCode_testingWindowsEnvironmentVariables_01.pl line 8.

有问题的行是:

print $localConfPath;  #will print the app path - C:\users\xxx\AppData\local
print $appdata; #prints - C:\users\xxx\AppData\Roaming

我不明白为什么他们不应该工作。

我已经检查过Perl Monks,Perl Maven,Stack Overflow和其他流行的Perl资源,但无济于事。即使是活跃状态也没有答案。

1 个答案:

答案 0 :(得分:2)

当您访问散列的各个项目时,您需要使用标量符号$而不是散列符号%

perl -e 'print $ENV{APPDATA}'