... and, in fact, why not just break out of the list here, since we're duplicating the end-of-function code here.

All of which leaves me wondering what the intended last item is if when are too many delimiters: should split(":::a:::b:::", ":", 2, false) give us "::b:::" or "b:::" or "b" as second entry ?  I think you're currently getting the first of those.