in reply to split empty (lead|trail)ing fields

Because split throws away empty trailing fields unless you tell it not to do so, by a third parameter.

In your case, there is nothing but empty fields, so split throws it all away.

This snippet:

print scalar split /:/, ':', -1;
keeps them all, and prints 2.