Perl 内でリストを生成する必要がある場合は、このFile::Finder
モジュールを使用すると作業が簡単になります。
テストされていませんが、動作するはずです:
use File::Finder;
my @wanted = File::Finder # finds all ..
->type( 'f' ) # .. files ..
->name( '*.txt' ) # .. ending in .txt ..
->in( '.' ) # .. in current dir ..
->not # .. that do not ..
->contains( qr/clean/ ); # .. contain "clean"
print $_, "\n" for @wanted;
きちんとしたもの!
編集:
問題をより明確に把握できたので、ここではモジュールは必要ないと思います。
use strict;
use warnings;
my @files = glob '*.txt'; # Dirty & clean laundry
my @dirty;
foreach my $file ( @files ) { # For each file ...
local $/ = undef; # Slurps the file in
open my $fh, $file or die $!;
unless ( <$fh> =~ /clean/ ) { # if the file isn't clean ..
push @dirty, $file; # .. it's dirty
}
close $fh;
}
print $_, "\n" for @dirty; # Dirty laundry list
仕組みを理解したら、これを簡単にすることができますgrep
。