这是在Windows上 - 我如何在perl中为所有不以“.zip”结尾的文件进行全局处理?
这是当前代码,并且出于此问题的目的,不可更改 - 所有可以更改的是$ pattern变量的值。
my @arr = map { glob( $_ ) } $pattern;
作为一个问题,这段代码中map函数的用途是什么?它有效,但我不明白。
答案 0 :(得分:5)
此处map
的使用表明,glob
可能有多种模式。my @arr = map { glob( $_ ) } ($pattern1, $pattern2);
例如
@arr
将列出所有匹配任一模式的文件(可能重复)。请注意,您也可以使用内置的readdir
填充数组readdir
。
如果您坚持使用上述行,或者使用use File::Basename;
@arr = grep { ! (fileparse $_, '.zip')[2] } @arr;
,则可以过滤掉结果,
.zip
为了更加严谨,您可能希望过滤掉实际上是压缩文件的文件,而不仅仅是名称以use File::MimeInfo::Magic;
@arr = grep { mimetype($_) ne 'application/zip' } @arr;
结尾的文件:
{{1}}
答案 1 :(得分:3)
根据glob,它更像是通配符匹配,而不是真正的正则表达式匹配。我从来没有喜欢过glob(结果在同一个脚本中是不可重复的,就像glob在循环中一样)。
我知道你说你不能改变那个glob线(所以这可能不可能),但是这段代码做了你想做的事情,但是使用了不同的代码:
opendir(DIR, ".") or die $!;
my @nonZipFiles = grep(!/^\.+|\.zip$/, readdir(DIR));
closedir(DIR);
print "$_\n" for @nonZipFiles;