perl6 - assignment to parameter

You can use the is copy trait on parameters:

sub myfunc($n is copy) {
    $n = $n + 5;
    return $n;
}

See https://docs.raku.org/type/Signature#index-entry-trait_is_copy for more information.


As mentioned by Elizabeth Mattijsen you probably want to use is copy.

However, if you really intend to mutate a variable used as an argument to that function, you can use the is rw trait:

my $num = 3;

mutating-func($num);

say $num; # prints 8

sub mutating-func($n is rw) {
    $n = $n + 5;
    return $n;
}

But this opens you up to errors if you pass it an immutable object (like a number instead of a variable):

# dies with "Parameter '$n' expected a writable container, but got Int value"
say mutating-func(5); # Error since you can't change a value

sub mutating-func($n is rw) {
    $n = $n + 5;
    return $n;
}