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

TTa*_*Ta4 0 perl environment-variables

我有一个文件,每行都有一个路径.我将这些行插入数组@dirs.一些路径包括环境变量.带路径的有效文件的示例:

/some/valid/path
$HOME/dir
$SOME_ENV/dir
Run Code Online (Sandbox Code Playgroud)

每个路径,我想检查它是否包含一个名为的文件abc.所以我使用:

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

但是,由于某种原因,它无法识别环境变量,这意味着它即使$SOME_ENV/dir包含abc文件也会失败.

此外,如果我按如下方式使用它,脚本会识别这些环境变量:

print $ENV{SOME_ENV}."\n";
print $ENV{HOME}."\n";
Run Code Online (Sandbox Code Playgroud)

此外,我试图用abs_path的的Cwd模块,以获取路径的真实路径(所以它不会包括环境变量),但它也不能识别环境变量.

为什么(-e $file)不承认环境变量?我该如何解决这个问题?

Chr*_*ner 6

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

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