我得到了一个文件,每行都有一个路径。我将这些行插入数组@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)
无法识别环境变量?我该如何解决这个问题?
答案 0 :(得分:6)
您的代码中没有评估$dir
中的环境变量的内容,因此您需要添加它。可以这样一种非常简单的方式-使用正则表达式查找变量,然后将其替换为%ENV
哈希中的值。
$dir =~ s/\$([A-Z0-9_]*)/$ENV{$1}/g;