Perl-скрипт не распознает пути, которые содержат переменные среды - PullRequest
0 голосов
/ 02 ноября 2018

Я получил файл с путем в каждой строке. Я вставляю эти строки в массив @dirs. Некоторые из путей включают переменные среды. Пример правильного файла с путями:

/some/valid/path
$HOME/dir
$SOME_ENV/dir

Каждый путь, я хотел бы проверить, содержит ли он файл с именем abc. Поэтому я использую:

foreach my $dir (@dirs) {
   chmod($dir);
   my $file = $dir."/"."abc";
   print "invalid dir: $dir" unless((-e $file) && (-s $file));
}

Но по какой-то причине он не распознает переменные окружения, то есть он не работает, даже если $SOME_ENV/dir содержит файл abc.

Кроме того, скрипт распознает эти переменные среды, если я использую его следующим образом:

print $ENV{SOME_ENV}."\n";
print $ENV{HOME}."\n";

Кроме того, я попытался использовать abs_path модуля Cwd, чтобы получить реальный путь пути (чтобы он не включал переменную среды), но он также не распознает переменная окружения.

почему (-e $file) не распознает переменную среды? Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 02 ноября 2018

Нет ничего в вашем коде, оценивающем $dir для переменных среды внутри него, поэтому вам нужно добавить это. Очень простой способ можно сделать следующим образом: использовать регулярное выражение для поиска переменных, а затем заменить их значениями в хеше %ENV.

$dir =~ s/\$([A-Z0-9_]*)/$ENV{$1}/g;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...