SPUG: spug: What is the idiomatic way to extractfirst/lastitemafter split?
Yitzchak Scott-Thoennes
sthoenna at efn.org
Thu Jun 30 01:09:06 PDT 2005
(somewhat reformatted for better readability and attribution)
On Wed, Jun 29, 2005 at 11:41:25AM -0700, DeRykus, Charles E wrote:
> Rick Croote wrote:
> > DeRykus, Charles E wrote:
> > > True and the same thing applies to J. Krahn's elegant solution. Once
> > > the output's drained, the rest of the list will be undefined.
> > >
> > > ($first,$last) = (split ...)[0,-1]; # $last undefined if list of 1
> >
> > Not true, the slice "[0,-1]" does not "drain", but just reuses
> > the same element in the case of one element after the split.
> > This then creates the appropriate 2 elements to initialize
> > $first and $last. Of course, $string must be initialized to
> > something other than what it would split on.
> > my $string = "one";
> > my ($first,$last) = (split /\s+/, $string)[0,-1];
> > print "$first\n";
> > print "$last\n";
>
> True, but that's very much semantic overkill in my opinion. I'd
> have to argue that the result is certainly the same as a "drain"
> even ,if technically, split is orchestrating the effect.
Can you expand on that? Using a list slice on [0,-1] is an idiom
to get the first and last elements; sometimes it looks like this:
my ($min, $max) = (sort { $a <=> $b } @values)[0, -1];
While there is an argument for writing completely or almost completely
idiom free perl, I don't see how using an idiom like this could be
described as "semantic overkill". And split's role is just creating
the list; I don't understand what you mean by orchestrating.
It sounds to me like you have an interesting point to make, but I'm
completely failing to understand you; I'd appreciate it if you could
make another attempt.
More information about the spug-list
mailing list