Meines Wissens gibt header das gewünschte gleich aus, aber es wird nicht zurückgegeben, um es in eine Variable zu schreiben.
Von daher ist das hier
print header(-type=>'text/html; charset=ISO-8859-1');
auch schon falsch gedacht. Die Ausgabe kommt hier von der Funktion header() selbst, aber nicht durch das print.