in reply to Re: Re^3: split/map weirdness: empty strings vs undef
in thread split/map weirdness: empty strings vs undef

You know, that gives me another idea for the cases you need to conserve the last field, although it is so similar to the add a bogus field approach that it bears the question whether the capture/grep hoopla is worth the hassle if you went that route anyway: add a field separator to the string.
$ perl -le'$_ = "2|3|||||"; print join " : ", grep ++$i%2, split /(\|) +/, "$_|"' 2 : 3 : : : : :

Makeshifts last the longest.