0

これはWindows上にあります-perlで「.zip」で終わらないすべてのファイルをグロブするにはどうすればよいですか?

これは現在のコードであり、この質問の目的のために変更することはできません。変更できるのは$pattern変数の値だけです。

my @arr = map { glob( $_ ) } $pattern;

余談ですが、このコードのmap関数の目的は何ですか?動作しますが、わかりません。

4

2 に答える 2

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;
于 2012-10-24T16:51:58.483 に答える
3

globによると、これはワイルドカード マッチングであり、真の正規表現マッチングではありません。とにかく、私はグロブが好きではありませんでした (グロブがループ内にある場合のように、同じスクリプト内で結果を繰り返すことはできません)。

そのグロブ行を変更できないと言ったことは知っていますが(したがって、これは不可能かもしれません)、このコードは、別のコードを使用して、あなたがやろうとしていることを実行します:

opendir(DIR, ".") or die $!;
my @nonZipFiles = grep(!/^\.+|\.zip$/, readdir(DIR));
closedir(DIR);

print "$_\n" for @nonZipFiles;
于 2012-10-24T16:13:06.040 に答える