SPUG: spug: What is the idiomatic way to extractfirst/lastitemafter split?

DeRykus, Charles E charles.e.derykus at boeing.com
Thu Jun 30 12:54:04 PDT 2005


 


On Thu, Jun 30, 2005 at 09:28:06AM -0700, DeRykus, Charles E wrote:
>> Ok, I characterized this as a "drain" because, superficially at
least, 
>> you're filling a bigger bucket with a smaller one.  The split output 
>> consists of a single item but the Action of the function split 
>> populates $first with that single item; and then backfills $last with

>> an undef. Here's what I assume Rick was referring to in claiming that

>> no "drain" occurred:
>> 
>>      perdoc -f split:
>> 
>>      When assigning to a list, if LIMIT is omitted, Perl supplies a
LIMIT
>>      one larger than the number of variables in the list, to avoid
>>      unnecessary work. 
>> 
>> 
>>      perl -MO=Deparse -e '($first,$last) = split(" ","foo");'
>>      ($first, $last) = split(" ", 'foo', 3);
>> 
>> 
>> The split really generates only 1 element; behind the scenes, split 
>> orchestrates output so $first gets populated with that 1 element and 
>> then $last gets backfilled with an 'undef' because the original list 
>> is exhausted. Maybe that seat-of-the-pants explanation is flawed 
>> somehow...
>> 
>> I assume Rick felt that because split generates values for both
$first 
>> and $last this shouldn't be thought of as a "drain". To me, it just 
>> seems natural to call it a "drain" because there's really a
>> 1 item output and that's trying to fill 2 slots.

>But the case under consideration isn't ($first, $last) = split >...;,
it's ($first, $last) = ( split ... )[0, -1]; which indeed
>never leaves $last undefined.  If only one element is produced by > >
split, both $first and $last get assigned that value.

 Oops, right.  I lost consciousness somwhere during the
 thread.

 --
Charles DeRykus
 
 


More information about the spug-list mailing list