On Tue, Nov 14, 2006 at 10:15:42PM -0500, Vincent Foley wrote:
: Hello everyone,
: I was toying around with Pugs and I tried the following Perl 5 list
: my ($a, undef, $b) = 1..3;
: Which gave me the following error message:
: Internal error while running expression:
: Unexpected ","
: expecting word character, "\\", ":", "*" or parameter name
: at <interactive> line 1, column 14
: I had a quick discussion on #perl6 with TimToady++ during my lunch
: hour, and he said that assignment to undef was no longer valid. His
: suggestion was to use the whatever operator (*) instead.
FWIW, I think we should follow gaal++'s suggestion and just use $ instead.
Now that I think about it some more, the * is likely to be confused with
the slurpy *, at least by readers if not by the parser.
: Now, this isn't implemented and my Haskell skills and knowledge of
: Pugs' internals aren't really advanced enough to implement this
: feature, however I can surely contribute the tests. Here's what I
: have right now in my working copy, let me know if this seems
(assuming * replaced by $ here)
: my @a = 1..3;
: my ($one, *, $three) = @a;
: is(~($one, $three), "1 3", "list assignment my ($, *, $) = @ works");
Why not just interpolate: "$one $three"
: my (*, $two) = @a;
: is($two, 2, "list assignment my (*, $) = @ works");
: my (*, *, $three) = @a;
: is($three, 3, "list assignment my (*, *, $) = @ works");
Note that this "my $three" is declaring the same $three lexical,
unlike in Perl 5, which would warn about a redeclaration. That's part
of why it's customary to put each test chunk in its own bare block
to prevent such accidental collisions.
: my (*, @b) = @a;
: is([EMAIL PROTECTED], "2 3", "list assignment my (*, @) = @ works");
Other than that, looks good to me.