On Sun, 03 Mar 2013 10:47:32 -0800, FROGGS.de wrote:
> There are weird things goind on:
>
> good:
> <FROGGS> r: '' ~~ / :my $a; <{ '$a' }> /
> <p6eval> rakudo 123dfa: ( no output )
>
> good:
> <FROGGS> r: say '' ~~ / :my $a; <{ '$a' }> /
> <p6eval> rakudo 123dfa: OUTPUT«#<failed match>»
>
> weird:
> <FROGGS> r: say '123' ~~ / :my $a=2; <{ '$a' }> /
> <p6eval> rakudo 123dfa: OUTPUT«「1」»
>
> good:
> <FROGGS> r: say '123' ~~ / :my $a=2; <{ "$a" }> /
> <p6eval> rakudo 123dfa: OUTPUT«「2」»
>
> weird:
> <FROGGS> r: say '$a' ~~ / :my $a=2; <{ '$a' }> /
> <p6eval> rakudo 123dfa: OUTPUT«#<failed match>»
>
> good:
> <FROGGS> std: say '$a' ~~ / <{ '$a' }> /
> <p6eval> std 52fe6d2: OUTPUT«ok 00:00 43m»
>
> IMO only variables in double quotes should interpolate. so '$a' should
> be treatet as that string.
As per the other reply, first { '$a' } produces the string $a,
then that string is interpreted as a regex which contains a
variable lookup, and the lexical lookup for $a is expected too work,
so the second "weird" example is functioning as intended.
Tests, including making sure $a is not expanded before the
closure returns, were added in roast commit 1bbe3c9d3, so resolving this ticket.