use strict; use warnings; use Data::Dumper; sub use_the_data { my $d = shift; print Dumper $d; } my %d; while () { chomp; my ($key, $value) = split /:\s*/; if (%d && $key eq 'Name') { use_the_data \%d; # reset %d %d = ($key => $value); } else { $d{$key} = $value } } use_the_data \%d; __DATA__ Name: 123 Phone: foo Name: blubb Phone: blah