use strict; use warnings; use Data::Dumper; my @months = qw/dummy jan feb mar apr may jun jul aug sep oct nov dec/; my (%report,$cust,$value,$date); while () { chomp; if (/^[A-Z]/) { $cust = $_; next; } ($date, $value) = split ' ',$_; my ($mon, $year) = split '/',$date; $report{$cust}[$mon] = $value; } print Dumper(\%report); __DATA__ CUSTA 1/2015 100 10/2015 1,000 12/2015 1,000 CUSTB 2/2015 100 10/2015 1,000 12/2015 100