while (<>) { if (/^<(.+?)>(.*)$/i) { $tag = $1; $part{$tag} .= $2; } else { $part{$tag} .= $_; } }