これはWindows上にあります-perlで「.zip」で終わらないすべてのファイルをグロブするにはどうすればよいですか?
これは現在のコードであり、この質問の目的のために変更することはできません。変更できるのは$pattern変数の値だけです。
my @arr = map { glob( $_ ) } $pattern;
余談ですが、このコードのmap関数の目的は何ですか?動作しますが、わかりません。
これはWindows上にあります-perlで「.zip」で終わらないすべてのファイルをグロブするにはどうすればよいですか?
これは現在のコードであり、この質問の目的のために変更することはできません。変更できるのは$pattern変数の値だけです。
my @arr = map { glob( $_ ) } $pattern;
余談ですが、このコードのmap関数の目的は何ですか?動作しますが、わかりません。
ここでの使用は、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;
globによると、これはワイルドカード マッチングであり、真の正規表現マッチングではありません。とにかく、私はグロブが好きではありませんでした (グロブがループ内にある場合のように、同じスクリプト内で結果を繰り返すことはできません)。
そのグロブ行を変更できないと言ったことは知っていますが(したがって、これは不可能かもしれません)、このコードは、別のコードを使用して、あなたがやろうとしていることを実行します:
opendir(DIR, ".") or die $!;
my @nonZipFiles = grep(!/^\.+|\.zip$/, readdir(DIR));
closedir(DIR);
print "$_\n" for @nonZipFiles;