Hello,
I'm getting up to speed with Perl 6 again after a long while, and I more
or less 'hit my nose' against something that I can reduce to the
following very basic snippet of code:
my $foo = 3;
say $foo;
{
say $foo;
my $foo = 6;
say $foo;
}
This will not compile with Perl 6 (Rakudo 2018.12) -- lexical symbol
'$foo' is already bound to an outer symbol; the implicit outer binding
must be rewritten as OUTER::<$foo> before you can unambiguously declare
a new '$foo' in this scope.
This will compile with Perl 5 when I add 'use v5.14;' at the top and it
will then print 3, then 3 then 6 (as expected).
Well, it seems that I can 'cheat' by simply doing a list assignment:
my $foo = 3;
say $foo;
{
say $foo;
my ($foo) = 6; # avoid `... '$foo' is already bound ...'
say $foo;
say $foo.WHAT; # is it really an integer?
}
The output is:
3
(Any)
6
(Int)
This behavior is fine I think (but a little unexpected due to my
experience with Perl 5).
Is this behavior normal/wanted/intented (from a language/compiler
perspective?).
Perhaps this shouldn't be and the compiler should also complain in this
list assignment case, or perhaps generate a warning?
I'm not that confident to state that this is a bug ;)
Hence the reason why I kind-of report this,
I hope this is somewhat useful,
Thanks for your time,
Regards,
Raymond Dresens.