#! perl use strict; use warnings; use Data::Dump; my @fields = qw( Summary Component Product Version Date ); my @issues; while () { chomp; if (/^ISSUE\s+(\w{5}\d+)$/) { push @issues, { Id => $1 }; } else { for my $field (@fields) { if (/^$field\s*:\s+(.+)$/) { $issues[-1]->{$field} = $1; last; } } } } dd \@issues; __DATA__ ----------------------------------------------------------- ISSUE ABCDE00078945 ----------------------------------------------------------- Summary : summary about the issue Component : Component desscription Product : Product name Version : Version number Date : 2013-10-15 ----------------------------------------------------------- ISSUE ABCDE00012345 ----------------------------------------------------------- Summary : summary about the issue Component : Component description Product : Product name Version : Version number Date : 2014-10-15