next unless /Synchronizing started|Synchronizing finished|Summary/; my @date= m|(\d+)/(\d+)/(\d+)|; #### my @date; if (@date = m{(\d+)/(\d+)/(\d+)}) { ... } #### my %times; my $job; while () { next unless (s{^\[(\d+/\d+/\d+ \d+:\d+:\d+)\]\s*}{}); # malformed line my $timestamp = $1; if (m/^(Synchonization|Analyzing) (started|finished), job: "(.*?)"/) { $job = $3; $times{$job}->{$1}->{$2} = $timestamp; } elsif (m/^Summary:/) { $times{$job}->{summary} = $_; } } print Dumper(\%times); use Data::Dumper;