use warnings; use strict; use DateTime; my $dt = DateTime->now; my %report; while () { chomp; my %month_data = split; for (keys %month_data){ $report{$_} += $month_data{$_}; } } my $report_months = 11; while ($report_months > -1){ my $now = $dt->clone; my $past_month = $now->subtract(months => $report_months)->month_name; print exists $report{$past_month} ? "$past_month: $report{$past_month}\n" : "$past_month: no data available\n"; $report_months--; } __DATA__ March 5 July 4 August 5 October 7 January 3 March 4 April 6 May 5 June 7 July 8 August 10 September 4 October 9 November 11 December 8 March 2 June 3 August 1 December 7 #### October: 16 November: 11 December: 15 January: 3 February: no data available March: 11 April: 6 May: 5 June: 10 July: 12 August: 16 September: 4