我正在编写一个脚本,它将接受用户的输入以加载配置/数据文件。我的第一个想法是(假设文件名在 $file 中):if (-e $file) { my $data = do $file; ...
我正在编写一个脚本,它将接受用户的输入以加载配置/数据文件。
我的第一个想法是(假设文件名为 $file
):
if (-e $file) {
my $data = do $file;
die "Failed to parse data\n" if $@;
} else {
die "File does not exist\n";
}
这在一定程度上是有效的 — 如果文件不存在,它就会因此而终止。但是,如果文件存在,并且不是完整路径(以 开头 /
),而是相对于当前目录,它就会终止,并发出一条来自 Perl 的消息:
[…] '.' 不再存在于 @INC 中;您的意思是 […]
这是为什么?我不想添加 .
, @INC
但我很惊讶这并没有随着我的消息而消失。难道它不应该让 do 和 set 失败吗 $@
?
如何测试文件是否存在且在 的范围内 @INC
?或者,也许有另一种解决方案,例如可靠地测试当前目录中的路径,并在传递给 之前使其成为完整路径 do
.