#!/usr/bin/perl use warnings; use strict; my %hash; my $header; while (<>) { if (my ($h) = /^(.*):$/) { $header = $h; } elsif (my ($k, $v) = /^(.*):(.*)$/) { $hash{$header}{$k} = $v; } } use Data::Dumper; print Dumper \%hash;