2017-01-04 9 views
6

与えられた2つのパラメータを交換するサブルーチンがあるとします。論理的には、読み書きパラメータが必要です。makeサブルーチンパラメータを読み書きとして作成する方法

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

私はエラーを取得する:

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

私はperl5の中のような\$paramを試すことができるとは思いません。

私は:=で何か試してみるべきだと思いますが、ドキュメントには関数のパラメータについて何も言及していません。

このサブルーチンへの参照としてパラメータを渡して、その値を変更できるようにするにはどうすればよいですか?あなたが達成しようとしている何のためにも使用することができますreverse

+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] 

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

($a,$b) .= reverse; 

say $a; # 2 
say $b; # 1 
関連する問題