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)不承认环境变量?我该如何解决这个问题?
您的代码中没有任何内容可以评估其中$dir的环境变量,因此您需要添加它.一种非常简单的方法可以这样做 - 使用正则表达式查找变量,然后用%ENV散列中的值替换它们.
$dir =~ s/\$([A-Z0-9_]*)/$ENV{$1}/g;
Run Code Online (Sandbox Code Playgroud)