Daniel Ruoso wrote:
> Hi,
> 
> As smop and mildew now support ControlExceptionReturn (see
> v6/mildew/t/return_function.t), an important question raised:
> 
>  sub plural { return 1,2 }
>  sub singular { return 1 }
>  my @a = plural();
>  my $b = plural();
>  my @c = singular();
>  my $d = singular();
> 
> What should @a, $b, @c and $d contain?

@a = 1, 2;
$b = [1, 2];
@c = 1;
$d = 1;

(According to DWIM semantics and my understanding of the specs)

> Note that the spec says explicitly that a Capture should be returned,
> delaying the context at which the value will be used, this allows
> 
>  sub named { return :x<1> }
>  my $x := |(named);
> 
> So, this also means that assigning
> 
>  my @a = plural();
>  my @c = singular();
> 
> forces list context in the capture, which should return all positional
> parameters, as expected. But
> 
>  my $b = plural();
>  my $d = singular();
> 
> would force item context in the capture, and here is the problem, as a
> capture in item context was supposed to return the invocant.

Maybe we could have a different rule for captures in scalar contexts
that don't have an invocant?

Just my 0.02€,
Moritz

Reply via email to