Maybe you already know that if you want to match a whitespace character except '\n', you could use the [^\S\n] idiom. Where \S matches any non-white space character, \n matches the return, and then take the complement of the set gives you \s but not \n. Handy trick in situations when you want to differentiate between whitespace and \n.
my $text = 'hello
this is a multiline
message';
$text =~ s/([^\S\n]+|\n)/$1 eq "\n" ?
print "New line\n" :
print "Whitespaces\n"; $1/gemi;
And you get -
New line
Whitespaces
Whitespaces
Whitespaces
Whitespaces
New line
Whitespaces
|