Well, it's almost 7 years later and Perl 6 is still a work in progress. But I know the answer to this issue: it works because the
Int object is
immutable. A
Dog object can change its attributes, so two variables sharing the same object (
$b=Dog::new;$a=$b;) will perceive the sharing. But an Int will never change. There are no mutating methods on it. Changing the value, e.g.
++$a, requires lvalue access to the variable, as this is
$a= 1+$a; and assigns a different
Int object to
$a, leaving
$b to still point to the original unchanged.
—John