On Thu, Jul 30, 2009 at 10:29:04AM -0500, Kyle Hasselbacher wrote:
> In Rakudo right now, this lives: "{$foo;$^foo}(1)"
>
> However, the spec test expects it to die during compilation (see the
> end of S06-signature/positional-placeholders.t). It says, "A
> non-twigil variable should not precede a corresponding twigil
> variable."
The spec is correct. Rakudo currently has some issues with
order-of-lexicals declarations.
> In Rakudo right now, this says 3: sub foo { my $a = 3; say $^a };
> foo(5); # RT #64310
> The spec test would seem to imply that this should die during the
> definition of 'foo'.
Rakudo should complain about the placeholder attempting to redefine $^a.
I don't know if that elevates to the level of "die", though; STD.pm
seems to treat it as a "potential difficulty".
> On the other hand, if we swap the statements, it merely complains that
> $a is redeclared and then croaks because we assigned to a read-only
> variable.
>
> sub foo { say $^a; my $a = 3 }; foo(5);
> Redeclaration of variable $a
> 5
> Cannot assign to readonly variable.
Rakudo is correct that it's a redeclaration and that the
variable (parameter) is readonly and cannot be assigned to.
Pm