Aaron Sherman wrote:
> Redirecting thread to language because I do agree that this is no longer a
> matter of a bug.
> 
> On Fri, Sep 18, 2009 at 9:28 AM, Moritz Lenz via RT <
> perl6-bugs-follo...@perl.org> wrote:
> 
>> On Thu Sep 17 08:53:59 2009, ajs wrote:
>> > This code behaves as expected, matching 2 or 3 in only one out of the
>> three
>> > cases:
>>
>> You say yourself that it behaves as expected, I don't see any bug.
>>
>>
> Yeah, I dropped a comma. That should have been "This code behaves as
> expected, matching 2 or 3, in only one out of the three cases.
> 
> 
> 
>> The case 2..3 (Range) is pretty clear. S03/Smart Matching/ says about
>> Arrays:
>>
>> Any       Array     lists are comparable    @$_ «===» X
>>
>> so it tries to interpret the LHS as a List and checks for element-wise
>> identity => False
>>
> 
> I think I see where you're going, here: that ranges are explicitly called
> out in the spec for given (I haven't double-checked that, but I seem to
> recall that that's right).
> 
> The problem is that we now have this rule (which is what caught me, here and
> made me think this was a bug):
> 
> 2,3 constructs a list. 2..3 also constructs a list, unless it's in a
> given/when condition in which case it's just a range.

No. 2..3 is always a range. It's just list context that turns it into a
list.

> That seems confusing. Is there any value at all in comparing a scalar to a
> list for identity by default? Why wouldn't we apply any() implicitly and get
> free consistency with the behavior of lists constructed with ..?

Because when we force you to write any(), it's immediately clear what
you mean.

But I agree that it is confusing, to a point. Maybe the case with List
or Array on the RHS should warn if the LHS isn't Positional. Don't know
if that's really a good idea, though.

Cheers,
Moritz

> Original code:
> 
> my $a = 2;
> print "Test 1 (anon array): ";
> given $a {
>   when [2,3] { say "Good" }
>   default { say "Bad" }
> }
> print "Test 2 (..): ";
> given $a {
>   when 2..3 { say "Good" }
>   default { say "Bad" }
> }
> print "Test 3 (bare ,): ";
> given $a {
>   when 2,3 { say "Good" }
>   default { say "Bad" }
> }
> 

Reply via email to