2017-01-04 2 views
6

Załóżmy, że mam podprogram, który zamienia dwa podane parametry. Logicznie musi mieć odczytane parametry zapisu.Jak zrobić parametr podprogramu jako readwrite

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

pojawia się błąd:

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

nie sądzę, mogę spróbować \$param jak w perl5.

Myślę, że powinienem spróbować coś z :=, ale dokumentacja nie wspomina nic o parametrach funkcji.

Jak przekazać parametr jako odniesienie do tego podprogramu, aby można było zmienić jego wartość?

+0

Jest nieco ukryty, ale jest na to dokumentacja: https://docs.perl6.org/type/Signature#Parameter_Traits_and_Modifiers – mscha

Odpowiedz

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] 

Można użyć reverse jak również za to, co staramy się osiągnąć.

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

($a,$b) .= reverse; 

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