Perl Glob所有不以zip结尾的东西

use*_*757 0 perl glob pattern-matching

这是在Windows上 - 我如何在perl中使用".zip"结束所有文件?

这是当前代码,并且出于此问题的目的,不可更改 - 所有可以更改的是$ pattern变量的值.

my @arr = map { glob( $_ ) } $pattern;
Run Code Online (Sandbox Code Playgroud)

另外一个问题,这段代码中map函数的用途是什么?它有效,但我不明白.

Joe*_*ger 5

map这里的使用表明一个人可能有多种模式glob.例如

my @arr = map { glob( $_ ) } ($pattern1, $pattern2);
Run Code Online (Sandbox Code Playgroud)

这将列出所有匹配任一模式的文件(可能重复).请注意,您也可以@arr使用readdirbuiltin 填充数组.

如果您坚持使用上述行,或者如果您使用readdir,您可能会过滤掉结果,

use File::Basename;
@arr = grep { ! (fileparse $_, '.zip')[2] } @arr;
Run Code Online (Sandbox Code Playgroud)

为了更加严格,您可能希望过滤出实际上是ARE zip文件的文件,而不仅仅是名称以以下结尾的文件.zip:

use File::MimeInfo::Magic;
@arr = grep { mimetype($_) ne 'application/zip' } @arr;
Run Code Online (Sandbox Code Playgroud)