可能重复:
File name matching with -e and regular expressions in perl.
for ex
if(-e / home / tree / a *){ 打印“找到文件” }
如何在文件测试操作符上使用正则表达式
答案 0 :(得分:5)
您无法在file existence test operator上使用正则表达式。
如果要使用正则表达式检查存在的文件名,则必须使用例如 readdir
或glob
检索文件列表(请注意,glob已经轻量级语法为</home/tree/*>
),然后使用正则表达式对其进行过滤。
请注意,在您的情况下,您使用的“表达式”/home/tree/a*
可以解释为glob模式而不是正则表达式。如果这是你想要的,你可以直接使用glob,如:
if ( () = </home/tree/a*> ) { print "file found" }
有关为何/不使用glob
作为测试条件的讨论,请参阅注释。
答案 1 :(得分:1)
为什么没有人喜欢readdir()?我第一次遇到Sean对JB回答的评论中提到的状态问题时,我停止使用glob。
这将让您了解如何使用readdir:
opendir(DIR, "/home/tree") or die $!;
my @matches = grep(/^a.*/, readdir(DIR));
closedir(DIR);
print join("\n", @matches);