Danke an alle,
es war eigentlich ein recht trivialer Fehler ;-) Es lag in der Tat am falschen Header. Mit dem Header text\html werden natürlich alle mehrfachen Leerzeichen ignoriert. Also habe ich $total =~ s/\s/ /g; eingefügt. Dadurch wurden natürlich auch alle Zeilenumbrüche entfernt, also auch nachdem ich den Header geändert habe.
Schande über mein Haupt...