#!/usr/bin/perl use strict; use Data::Dumper; my (@log, %rec); while(<>){ if( /^-/ ){ push @log, { %rec }; %rec = (); next; } chomp; my ($k, $v) = split /\s*:\s*/, $_, 2; $rec{ $k } = $v if $k; } push @log, { %rec } if keys %rec; print Dumper(\@log);