正規表現の先読み、後読みアサーション

ってのを使ったらアルファベットと数字を簡単に分割できるかなと思ったんだけど、
んー、イマイチ。

$_="ab12cde3f";
s/(?<=[a-z])(?=\d)|(?<=\d)(?=[a-z])/-/g;
print "$_\n";
## ab-12-cde-3-f

でもこれもなぁ・・・

$_="ab12cde3f";
s/([a-z])(\d)/$1-$2/g;
s/(\d)([a-z])/$1-$2/g;
print "$_\n";
## ab-12-cde-3-f


PHPのほうが書きやすかったり。

echo preg_replace(
    array("/([0-9])([a-z])/", "/([a-z])([0-9])/"),
    "$1-$2", "12345hoge6789"
  ) . "\n";

Perlでももっと簡単に書く方法あるはず。
先読み、後読みアサーションもまともに使ったことないけどもっと使いどころ考えてみよう。





追記:
split /(\d+)/でできるか・・・