use strict; use warnings; my $string = qq{one two \n\n three\t\t\n four five\n\n\n\t six \n\n}; my $newString = join qq{\n}, map { s{^\s+}{}; s{\s+$}{}; s{\s+}{ }g; $_; } split m{\n+}, $string; print qq{->$newString<-\n};