如何在目录中列出包含.c
和.h
文件的文件
目前正在使用if(m/.\.c$/)
它只提供.c
个文件。我需要.c
和.h
个文件的正则表达式。
答案 0 :(得分:2)
在Perl中,您可以使用以下代码列出具有.c
和.h
扩展名的所有文件:
opendir my $dir, "some/path/" or die "Cannot open directory: $!";
my @files = grep{/\.c$|\.h$/}readdir $dir;
closedir $dir;
print "@files";
修改强>
如果你真的想使用if()
,你可以这样做:
opendir my $dir, "some/path/" or die "Cannot open directory: $!";
my @files = readdir $dir;
closedir $dir;
foreach (@files)
{
if (/.\.[ch]\z/s)
{
print "$_\n";
}
}
答案 1 :(得分:1)
使用字符类。也就是说,将package.json
和c
放在方括号内。
h
if(m/.\.[hc]$/)
匹配[hc]
或h
答案 2 :(得分:0)
要获取目录中的文件列表,请使用glob()
。请参阅perldoc -f glob
http://perldoc.perl.org/functions/glob.html
my @files = glob( "$path/*.[ch]" );
print "$path : @files\n";
如果路径或文件名中有空格,请使用File::Glob
中的bsd_glob
use File::Glob qw( :bsd_glob );
my @files = glob( "$path/*.[ch]" );
print "$path : @files\n";
请参阅perldoc File::Glob
http://perldoc.perl.org/File/Glob.html
File::Glob
是标准模块,随Perl一起安装。有关所有标准模块的列表,请参阅perldoc perlmodlib
http://perldoc.perl.org/perlmodlib.html