class Fish { has @.scales; } #### class Fish { has @!scales; method scales () { return @!scales } # other stuff it does (not exhaustive) submethod BUILD ( :@!scales ){} method gist () { … } method Capture () { \( :@!scales ) } } #### class Fish { has @.scales is rw; } #### class Fish { has @!scales; # v---v method scales () is rw { return-rw @!scales } # other stuff it does (not exhaustive) submethod BUILD ( :@!scales ){} method gist () { … } method Capture () { \( :@!scales ) } } #### my $fish = Fish.new; $fish.scales = ('green','blue','yellow') #### class Fish { has @.scales; multi method scales () { @!scales } multi method scales ( +@new ) { @!scales = @new } } my $fish = Fish.new; $fish.scales('green','blue','yellow'); say $fish.scales(); # does not clear it $fish.scales(()); # clears it #### class Fish { has @.scales; method scales ( |c (+@new) ) { @!scales = @new if c; return @!scales; } } my $fish = Fish.new; $fish.scales('green','blue','yellow'); say $fish.scales(); # does not clear it $fish.scales(()); # clears it #### class Fish { has @.scales; } my $fish = Fish.new; $fish.scales = ('green','blue','yellow'); say $fish.scales(); $fish.scales = (); # clears it