open my $fh, '<', $filename or die "$filename: $!"; while (<$fh>) { if (/pattern/) { # do something ... print $_; } } close $fh; #### use warnings; use strict; use DateTime; use DateTime::Format::Strptime; use Path::Class qw/dir/; my $LOGPATH = '.'; my $STARTD = '2017-12-08'; my $NUMDAYS = 3; my $PATTERN = '1.2.3.4'; my $strp = DateTime::Format::Strptime->new(on_error=>'croak', pattern => '%Y-%m-%d', time_zone=>'local'); my $dt = $strp->parse_datetime($STARTD); my @files; for (1..$NUMDAYS) { my $date = $dt->strftime('%Y-%m-%d'); push @files, sort grep { $_->basename=~/\.log\z/i } dir($LOGPATH,$date)->children; $dt->add(days=>1); } { # in a new block for "local" local *ARGV; @ARGV = @files; while (<>) { chomp; if (/\Q$PATTERN\E/) { print "$ARGV:$.: $_\n"; } } continue { close ARGV if eof } }