my @lines = split /\n/, $m; my %m; my $curr_index; foreach my $line (@lines) { $line =~ /^\s*(\w+)?\s*:\s*(.*)$/; next unless $1 || $2; unless (defined $curr_index) { die "First line doesn't have a key\n" unless $1; $m{$1} = $2; $curr_index = $1; next; } if ($1) { $m{$1} = $2; $curr_index = $1; next; } $m{$curr_index} .= "\n$2"; }