develooper Front page | perl.perl5.porters | Postings from July 2009

Re: [PATCH] Remove implicit split to @_

Thread Previous | Thread Next
Chas. Owens
July 10, 2009 09:19
Re: [PATCH] Remove implicit split to @_
Message ID:
On Fri, Jul 10, 2009 at 12:04, Abigail<> wrote:
> On Fri, Jul 10, 2009 at 11:55:16AM -0400, Chas. Owens wrote:
>> On Fri, Jul 10, 2009 at 10:39, Peter Scott<> wrote:
>> > On Thu, 09 Jul 2009 21:28:14 -0700, Chip Salzenberg wrote:
>> >
>> >> This is an amusing discussion.
>> >>
>> >> The only problem that I observe with scalar split writing to @_
>> >> implicitly is that it's an easy thing to do by accident and is almost
>> >> never useful. Therefore, removing it seems a public service.
>> >>
>> >> I favor simply making it a compile-time error to use split in scalar
>> >> context.  No problem with silently changing semantics and no more
>> >> surprising behavior.  Everybody's happy.  (right?)
>> >
>> > I don't get it.  The docs say that scalar split returns the number of
>> > elements.  That's useful and convenient, and more intuitive than some of
>> > the alternative gyrations that have been suggested.  No one cares about it
>> > shoving the contents in @_ or wants that to continue, especially since it
>> > results in a warning.  So why can't we make it return the number of
>> > elements without either populating @_ or generating a warning?
>> >
>> > --
>> > Peter Scott
>> >
>> The question is when do you want to know how many items a string can
>> be split into without actually splitting the line?  If you are going
>> to split the line, then you can ask the array how many elements it
>> has.  I really don't see how scalar split (without splitting into @_
>> or some other variable) is useful.  Why not have it split into @F?  @F
>> is already used with -a, and is documented in perlvar, so it shouldn't
>> be in use by anyone.
> Since @F is *only* populated by the little used, and generally unknown -a,
> I wouldn't count on it not being used.
> I do see a use for split in scalar context returning the number of
> chunck which would have resulted - and I'd probably would have used
> it in code were it not for the implicite population of @_.
> Personally, I don't see much benefit for implicite populating any array,
> whether it's @_, @F, @{^SPLIT}, or something else. I won't lose a night
> of sleep over it if that was gone.
> But I'm not a supporter of making split in scalar context an error.
> Either replace it with something 'better' (for instance, just a count),
> or leave it as is.
> Abigail

Just out of curiosity, what is that use?  I have a hard time imagining
how it would be useful to know how many items are in a string and not
having the items split out for me.  Perhaps this points to a need for
a List::Util::count_columns function?  Something like

package List::Util;

sub count_columns {
    my ($regex, $string, $max) = @_;
    my $count =()= /$regex/g;
    return max($count+1, $max);

Chas. Owens
The most important skill a programmer can have is the ability to read.

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About