【发布时间】:2018-11-03 01:28:11
【问题描述】:
我得到了一个文件,每行都有一个路径。我将这些行插入到数组@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";
此外,我尝试使用Cwd模块的abs_path,以获取路径的真实路径(因此它不会包含环境变量),但它也无法识别环境变量。
为什么(-e $file) 无法识别环境变量?我该如何解决这个问题?
【问题讨论】:
-
确切的错误信息是什么?
-
如果他们没有提前知道:
no strict 'vars';use Env; -
打电话给
chmod是为了什么?第一个参数应该是新的权限 -
感谢 cmets。我不知道路径。用户提供一个文件,我从中提取路径到一个数组中。即使这个目录路径包含
abc,检查(-e $file)将返回false,因为它只是(出于某种原因)复制字符串而不使用env。 -
您是不是要使用
chomp(perldoc) 而不是chmod?
标签: perl environment-variables