2017-01-04 2 views
6

Предположим, у меня есть подпрограмма, которая меняет два заданных параметра. Логически необходимо иметь прочитанные параметры записи.Как сделать make подпрограммным параметром как readwrite

sub swap($l, $r) 
{ 
    my $tmp = $l; 
    $l=$r; 
    $r=$tmp; 
} 

Я получаю ошибку:

Cannot assign to a read only variable ($l) or a value

Я не думаю, что я могу попробовать \$param как в perl5.

Я думаю, что я должен попробовать что-то с :=, но в документации ничего не говорится о параметрах функции.

Как передать параметр в качестве ссылки на эту подпрограмму, чтобы я мог изменить ее значение?

+0

Это немного скрыто, но есть документация для этого: https://docs.perl6.org/type/Signature#Parameter_Traits_and_Modifiers – mscha

ответ

10
sub swap ($l is rw, $r is rw) { 
    ($r,$l) = ($l,$r) 
} 
my $a = 1; 
my $b = 2; 

swap $a, $b; 

say $a; # 2; 
my @a[2] = 1,2; 

swap |@a; 

say @a; # [2 1] 

Вы можете использовать reverse, а также за то, что вы пытаетесь достичь.

my $a = 1; 
my $b = 2; 

($a,$b) .= reverse; 

say $a; # 2 
say $b; # 1