in reply to split on zero-length pattern
perl -lwe 'use strict; print(join("/",split(/(?!\.\d)/,"123.456.78.1")))'
In your code you have a negative look-ahead assertion (?!\.\d).
The idea is that a split point is any point in the string which is preceeded by a dot followed by a digit.
In the explanation below you talk about "a point in the string which is preceeded by". For something like that you need a positive look-behind assertion.
Maybe you just mixed them up? Using (?<=\.\d) works as expected for me.