while (my $logfile = glob('access-????.log')) { open(my $logfile_fh, '<', $logfile) or die("Unable to open yearly logfile $logfile: $!\n"); my ($year) = $logfile =~ /^access-(....)\.log$/; my $output_fh; my $month = -1; while (<$logfile_fh>) { # Extract month of log entry. my ($new_month) = /$year-(..)/; if ($new_month != $month) { $month = $new_month; my $output_file = sprintf('access-%04d-%02d.log', $year, $month); open($output_fh, '>', $output_file) or die("Unable to create monthly logfile $output_file: $!\n"); } print $output_fh $_; } }