Re: List assignment question
Mark J. Reed wrote: I distinctly recall having to do things like (my $a, undef, my $b) to avoid errors because you can't assign to undef. Maybe I'm just hallucinating. Maybe :) $ perl -Mstrict -e 'my ($a, undef, $b) = 1..3; print $a $b\n;' 1 3 This works as far back as v5.6.0 (which is the oldest I have around). -- package JAPH;use Catalyst qw/-Debug/;($;=JAPH)-config(name = do { $,.=reverse qw[Jonathan tsu rehton lre rekca Rockway][$_].[split //, ;$;]-[$_].q; ;for 1..4;$,=~s;^.;;;$,});$;-setup;
Re: List assignment question
Vincent Foley wrote: Hello everyone, I was toying around with Pugs and I tried the following Perl 5 list assignment 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 For reference, this sort of operation works if you write it on two lines, like: my ($a, $b); ($a, undef, $b) = 1..3; say $a is 1 and $b is 3; I'll look around in the source and see if I can make this work like perl5 (unless that's a bad idea for some reason). Regards, Jonathan Rockway -- package JAPH;use Catalyst qw/-Debug/;($;=JAPH)-config(name = do { $,.=reverse qw[Jonathan tsu rehton lre rekca Rockway][$_].[split //, ;$;]-[$_].q; ;for 1..4;$,=~s;^.;;;$,});$;-setup;
Re: List assignment question
On Wed, Nov 15, 2006 at 10:28:41AM -0600, Jonathan Rockway wrote: : For reference, this sort of operation works if you write it on two : lines, like: : : my ($a, $b); : ($a, undef, $b) = 1..3; : say $a is 1 and $b is 3; : : I'll look around in the source and see if I can make this work like : perl5 (unless that's a bad idea for some reason). That will just be my ($a, $, $b) = 1..3 in Perl 6. It should be an error to try to modify undef, I think, and we have a notation for anonymous variables, so why not use it? Larry
Re: List assignment question
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 : assignment : : 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 : reasonable. (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. Larry
Re: List assignment question
On 11/14/06, Vincent Foley [EMAIL PROTECTED] wrote: I was toying around with Pugs and I tried the following Perl 5 list assignment my ($a, undef, $b) = 1..3; Huh. I didn't think that worked in Perl 5, either. What am I misremembering? I distinctly recall having to do things like (my $a, undef, my $b) to avoid errors because you can't assign to undef. Maybe I'm just hallucinating.
Re: List assignment question
On 11/15/06, Mark J. Reed [EMAIL PROTECTED] wrote: On 11/14/06, Vincent Foley [EMAIL PROTECTED] wrote: I was toying around with Pugs and I tried the following Perl 5 list assignment my ($a, undef, $b) = 1..3; Huh. I didn't think that worked in Perl 5, either. What am I misremembering? I distinctly recall having to do things like (my $a, undef, my $b) to avoid errors because you can't assign to undef. Maybe I'm just hallucinating. (my $x, undef, my $y) = 1 .. 3; parses to my ($x, undef, $y) = 1 .. 3 and always has as far as I know, so please share your hallucinogens with the list:)
Re: List assignment question
On Nov 15, 2006, at 12:04 PM, Mark J. Reed wrote: On 11/14/06, Vincent Foley [EMAIL PROTECTED] wrote: I was toying around with Pugs and I tried the following Perl 5 list assignment my ($a, undef, $b) = 1..3; Huh. I didn't think that worked in Perl 5, either. What am I misremembering? I distinctly recall having to do things like (my $a, undef, my $b) to avoid errors because you can't assign to undef. Maybe I'm just hallucinating. It didn't work in early Perl, but certainly did by 5.00503. I don't recall when it was added. -- brandon s. allbery [linux,solaris,freebsd,perl] [EMAIL PROTECTED] system administrator [openafs,heimdal,too many hats] [EMAIL PROTECTED] electrical and computer engineering, carnegie mellon university KF8NH
Re: List assignment question
my ($a, undef, $b) = 1..3; Huh. I didn't think that worked in Perl 5, either. What am I misremembering? I distinctly recall having to do things like (my $a, undef, my $b) to avoid errors because you can't assign to undef. Maybe I'm just hallucinating. Are you remembering this: my $a = 1; ($a, undef, my $b) = 1..3; If you attempted to do my ($a, undef, $b) you'd get a warn error about re-declaring $a. Paul
Re: List assignment question
On Wed, Nov 15, 2006 at 05:41:24PM +, Ævar Arnfjörð Bjarmason wrote: On 11/15/06, Mark J. Reed [EMAIL PROTECTED] wrote: On 11/14/06, Vincent Foley [EMAIL PROTECTED] wrote: I was toying around with Pugs and I tried the following Perl 5 list assignment my ($a, undef, $b) = 1..3; Huh. I didn't think that worked in Perl 5, either. What am I misremembering? I distinctly recall having to do things like (my $a, undef, my $b) to avoid errors because you can't assign to undef. Maybe I'm just hallucinating. (my $x, undef, my $y) = 1 .. 3; parses to my ($x, undef, $y) = 1 .. 3 and always has as far as I know, so please share your hallucinogens with the list:) I thought that allowing undef in my ($a, undef, $b) came in around 5.004ish, but I can't find it in perldelta, and I don't have a version compiled to test with (or any quick way to compile them, given that pretty much only AIX is so stable that early perls compile unmodified. Probably someone will tell me that VMS is also good enough, for 5.002 or later) Nicholas Clark
Re: List assignment question
On Wed, Nov 15, 2006 at 11:17:57PM +, Nicholas Clark wrote: I thought that allowing undef in my ($a, undef, $b) came in around 5.004ish, but I can't find it in perldelta, and I don't have a version compiled to test with (or any quick way to compile them, given that pretty much only AIX is so stable that early perls compile unmodified. Probably someone will tell me that VMS is also good enough, for 5.002 or later) $ perl-5322 -we'my ($x,undef,$y) = 1..3' Can't declare undef operator in my at -e line 1, near ) = Execution of -e aborted due to compilation errors. $ perl545 -we'my ($x,undef,$y) = 1..3' $ -- There's something wrong with our bloody ships today, Chatfield. -- Admiral Beatty at the Battle of Jutland, 31st May 1916.
Re: List assignment question
On 11/15/06, Ævar Arnfjörð Bjarmason [EMAIL PROTECTED] wrote: On 11/15/06, Mark J. Reed [EMAIL PROTECTED] wrote: On 11/14/06, Vincent Foley [EMAIL PROTECTED] wrote: I was toying around with Pugs and I tried the following Perl 5 list assignment my ($a, undef, $b) = 1..3; Huh. I didn't think that worked in Perl 5, either. What am I misremembering? I distinctly recall having to do things like (my $a, undef, my $b) to avoid errors because you can't assign to undef. Maybe I'm just hallucinating. (my $x, undef, my $y) = 1 .. 3; parses to my ($x, undef, $y) = 1 .. 3 and always has as far as I know, so please share your hallucinogens with the list:) Sadly, the hallucinogens are essential, not external. But I'm pretty sure those are two different parse trees. I misremembered the reason for the construct, though: assigning to undef has always been ok (even in perl4 and probably earlier), but declaring my undef wasn't, iirc. -- Mark J. Reed [EMAIL PROTECTED]
Re: List assignment question
On 11/15/06, Dave Mitchell [EMAIL PROTECTED] wrote: $ perl-5322 -we'my ($x,undef,$y) = 1..3' Can't declare undef operator in my at -e line 1, near ) = Execution of -e aborted due to compilation errors. $ perl545 -we'my ($x,undef,$y) = 1..3' $ Ah-hah! So I'm not crazy! Necessarily, anyway. Just behind the times. Thanks, Dave! -- Mark J. Reed [EMAIL PROTECTED]