#! 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 #### 17:02 >perl 996_SoPW.pl [ { Component => "Component desscription ", Date => "2013-10-15", Id => "ABCDE00078945", Product => "Product name", Summary => "summary about the issue", Version => "Version number", }, { Component => "Component description ", Date => "2014-10-15", Id => "ABCDE00012345", Product => "Product name", Summary => "summary about the issue", Version => "Version number", }, ] 17:02 >