my @log_files = ...[ read list of files from dir ]...; if (@log_files) { my $newest_idx = 0; my $newest_mtime = -M $log_files[0]; for my $idx (1..$#log_files) { my $mtime = -M $log_files[$idx]; next if $mtime < $newest_mtime; $newest_idx = $idx; $newest_mtime = $mtime; } # Leave newest alone. splice(@log_files, $newest_idx, 1, ()); } for my $log_file (@log_files) { ...[ process $log_file ]... }