{ package CalendarEntry; sub new { my $pkg = shift; bless { dates => [], name => shift, }, $pkg } sub add_date { my $self = shift; push @{ $self->{'dates'} }, @_; } } # end CalendarEntry. my @entries; # array of CalendarEntry objects. my $entry; while (<>) { chomp; if ( /calendar: (.*)/ ) { defined $entry and push @entries, $entry; $entry = new CalendarEntry $1; } else { $entry->add_date( $_ ); } } defined $entry and push @entries, $entry; #### my %entries = map { $_->{'name'} => $_->{'dates'} } @entries; #### @some_dates = @{ $entries{'Calendar_2_test'} };