访问 Windows 中的 Perl 环境 (shell) 变量 - $ENV 不工作

Access Perl environment (shell) variables in Windows - $ENV not working

问题

我在这个 SO post 中找到了如何使用 windows 环境变量(例如 %AppData%%HomePath%%SystemRoot% 等) :

这是被选为有效的正确答案的代码片段:

 #!/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 post 中的代码。该代码也不起作用。使用 post 中的代码,我收到此错误:

$ 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 资源,但均无济于事。连Active State都没有答案

当您访问散列的单个项目时,您需要使用标量印记 $ 而不是散列印记 %:

perl -e 'print $ENV{APPDATA}'