Проблема
Я узнал, как использовать переменные среды Windows (например, %AppData%
, %HomePath%
, %SystemRoot%
и т. д.) в этом сообщении SO:
Получение пути %AppData% в Perl-скрипте
Вот фрагмент кода, который был выбран в качестве рабочего правильного ответа:
#!/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 (#!), поэтому я пробовал сценарий как с ней, так и без нее, но безрезультатно.
Моя установка
Я использую Perl, поставляемый с GitBash, если это имеет значение.
Что я пробовал
Я попробовал простое выполнение командной строки Perl:
perl -e 'print %ENV{AppData}';
Это не сработало. Я также пробовал следующие альтернативы:
perl -e 'print %ENV{APPDATA}';
perl -e 'print %ENV{appdata}';
Это тоже не сработало. Вот ошибка, которую я получаю (одинаковая для всех трех версий):
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, но безрезультатно. Даже у Active State не было ответа.
$ENV{...}
, а не%ENV{...}
при попытке доступа к отдельным элементам в хеше. - person stevieb   schedule 13.02.2017perl -E "..."
. Я никогда раньше не использовал git bash, так что это может быть неприменимо. - person stevieb   schedule 13.02.2017$ perl -e 'print $ENV{APPDATA}';
работает отлично. - person Eric Hepperle - CodeSlayer2010   schedule 13.02.2017bash
, то одинарные кавычки были уместны. - person ikegami   schedule 13.02.2017cmd.exe
или нет. - person stevieb   schedule 13.02.2017