my @data = (); while ( my $line = ) { last if ($line =~ /^__METADATA__$/); push @data, $line; } # assuming no multivalue keys my %metadata = map { chomp $_; split( $_, /:/, 2) } ();