#!/usr/bin/env perl use strict; use warnings; my %hdrs; my $hdr; my @hdrs_order; my %hdrs_dup = ( "Content-Disposition", 1, "Date" => 1, "From" => 1, "Message-ID" => 1, "Subject" => 1, "To" => 1, ); while (<>) { chomp; last if ($_ eq ""); /^([^:]+): (.*)$/; if (/^\s/) { @{$hdrs{$hdr}}[-1] .= "\n$_"; next; }; $hdr = $1; my $val = $2; (defined $hdrs{$hdr}) ? (push @{$hdrs{$hdr}}, $val) : ($hdrs{$hdr} = [$val]); push @hdrs_order, $hdr; }; my %seen; foreach (@hdrs_order) { next if (defined $seen{$_}); $seen{$_} = 1; if (defined $hdrs_dup{$_}) { print "$_: @{$hdrs{$_}}[-1]\n"; next; }; foreach my $val (@{$hdrs{$_}}) { print "$_: $val\n"; }; }; print "\n"; while (<>) { print };