http://www.perlmonks.org?node_id=203014


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

Argh... I thought I could do better, but to get your exact results, all I could come up with was:
my @fields = $string =~ m/([^|]*)\|?/g; $string && $string !~ /\|$/ && pop @fields;
That second line can get a bit simpler if you define an empty string to have zero fields instead of having a single null field.

Congrats, your solution is better than mine even though it looks unnecessarily complicated.

I think the best suggestion so far is to tell split how many fields you want:

my @fields = split(/\|/,$string,$string =~ tr/|/|/ + 1);
Though I'd probably break it up into two lines:
my $fieldcount = $string =~ tr/|/|/ + 1; my @fields = split(/\|/, $string, $fieldcount);

-Blake