Perl脚本无法识别包含环境变量的路径

时间:2018-11-02 15:52:26

标签: perl environment-variables

我得到了一个文件,每行都有一个路径。我将这些行插入数组@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 :(得分:6)

您的代码中没有评估$dir中的环境变量的内容,因此您需要添加它。可以这样一种非常简单的方式-使用正则表达式查找变量,然后将其替换为%ENV哈希中的值。

$dir =~ s/\$([A-Z0-9_]*)/$ENV{$1}/g;