In Control flow§
See primary documentation in context for return-rw.
The sub return
will return values, not containers. Those are immutable and will lead to runtime errors when attempted to be mutated.
sub s(){ my $a = 41; return $a }; say ++s(); CATCH { default { say .^name, ': ', .Str } }; # OUTPUT: «X::Multi::NoMatch.new(dispatcher …
To return a mutable container, use return-rw
.
sub s(){ my $a = 41; return-rw $a }; say ++s(); # OUTPUT: «42»
The same rules as for return
regarding phasers and control exceptions apply.