#!/usr/local/bin/perl -w use strict; use Data::Dumper; my %records; { local $/ = 'calendar: '; # record separator. while ( ) { push( @{$records{$1}}, split(/\n+|calendar: /) ) if ( s/Calendar_([0-9]+)_test\n+// ); } } print Dumper( \%records ); __DATA__ calendar: Calendar_1_test 11/01/03 11/02/03 calendar: Calendar_2_test 01/02/03 01/04/03 calendar: Calendar_3_test 03/01/03 03/02/03 #### :!./test.pl $VAR1 = { '1' => [ '11/01/03', '11/02/03' ], '2' => [ '01/02/03', '01/04/03' ], '3' => [ '03/01/03', '03/02/03' ] };