如何在文件测试操作符上使用正则表达式

时间:2011-02-24 16:43:47

标签: perl

  

可能重复:
  File name matching with -e and regular expressions in perl.

for ex

if(-e / home / tree / a *){   打印“找到文件” }

如何在文件测试操作符上使用正则表达式

2 个答案:

答案 0 :(得分:5)

您无法在file existence test operator上使用正则表达式。

如果要使用正则表达式检查存在的文件名,则必须使用例如 readdirglob检索文件列表(请注意,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);