>>343
その出力分かり辛いよ(笑)。

my $text = "0\n1\n\n2\n\n\n3\n\n\n\n*";
while ($text =~ /^\s*$/gm) {
  tr/\n/./ for my($pre, $match, $post) = ($`, $&, $');
  print "$pre($match)$post\n";
}

$ は*行末の直前*にマッチするというのが原因だね。