#!/usr/local/bin/perl use warnings; use strict; my $record_start_regexp = qr/^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d:\d\d\d/; sub do_something { print("[\n"); print($_[0]); print("]\n"); } { local $_; my $data; for (;;) { $_ = ; last if not defined $_; last if /$record_start_regexp/; } while (defined) { $data .= $_; $_ = ; if (!defined || /$record_start_regexp/) { do_something($data); $data = ''; } } }