Aaron pointed out:
> But, in terms of constants, it seems to me that there's no > difference. They both have only one value that is assigned > when the module/class is parsed. Well, in *practice* there's no difference, but in their mystical essences, they're completely different. ;-) > > I'd do that like so (using Larry's preferred syntax): > [...] > > method INIT ($idval) { $.id := $idval } > > Hm... that looks to me like a regular ":="; is it? Yep. > If so, what good is "is const" if you can override it with > a ":="? Am I missing something? That's a binding, not an assignment. C<is const> means: "Once declared cannot be *assigned* to". But that doesn't mean one can't *bind* a new value to the variable (which would retain its C<const>-induced unassignability after the binding). Consider the following Perl 5: # CREATE CONSTANT *constant = \7; print "$constant\n"; # TRY TO ASSIGN (THROWS EXCEPTION) eval { $constant = -7 } or print $@; print "$constant\n"; # TRY TO REBIND (WORKS FINE) eval { *constant = \-7) } or print $@; print "$constant\n"; The analogy in Perl 6 would be: # CREATE CONSTANT my $constant is const = 7; print "$constant\n"; # TRY TO ASSIGN (THROWS EXCEPTION) try { $constant = -7 } catch { print $! } print "$constant\n"; # TRY TO REBIND (WORKS FINE) try { $constant := -7) } catch { print $! } print "$constant\n"; Damian