来自perldoc 关于 -X 文件测试操作符:
文件测试,其中 X 是下面列出的字母之一。这个一元
运算符接受一个参数,文件名、文件句柄或
dirhandle,并测试关联的文件以查看是否为真
关于它。
在将ls 命令用双引号括起来时,您希望测试ls 返回的文件名,但实际上您是在测试名为'ls *.txt' 的文件是否存在。
有几个选项。您可以在单独的步骤中使用ls 来获取所有文本文件名,然后测试是否存在单个文件名。
my @text_files = `ls *.txt`;
chomp(@text_files);
if ( -e $text_files[0] ) {
...
}
else {
...
}
但由于ls 将仅返回现有文件,因此根本不需要-e 此处的检查。你可以简单地说:
my @text_files = `ls *.txt`;
if ( @text_files ) {
print "Text file exist"
}
else {
print "No Text file exist"
}
我还应该注意,由于您没有在 ls 命令中使用 $dir,因此您实际上并不是在查看 $dir 目录,而是当前工作目录。您需要将$dir 添加到ls 命令:
my @text_files = `ls $dir/*.txt`;
if ( @text_files ) {
print "Text file exist"
}
else {
print "No Text file exist"
}
或者,您可以使用 glob 内置函数而不是使用 ls 并让 Perl 管理如何实际读取文件。这通常是更健壮和可维护的解决方案:
my @text_files = glob("$dir/*.txt");
if ( @text_files ) {
print "Text file exist"
}
else {
print "No Text file exist"
}