in reply to
split on zero-length pattern
perl -lwe 'use strict; print(join("/",split(/(?!\.\d)/,"123.456.78.1")))'
The idea is that a split point is any point in the string which is preceeded by a dot followed by a digit.
In your code you have a negative look-ahead assertion (?!\.\d)
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.