なんでわざわざ正規表現使うんだ?
$str = sprintf '%s/%s/%s-%s', split '.', $str;

これでいいだろ
汎用性も十分