2016-06-18 4 views
1

サブルーチンに渡された配列を変更しようとしています。Perlでサブルーチンを使用して配列要素を変更する方法

配列参照をサブルーチンに渡して新しい値を割り当てていますが、呼び出し元側に反映されません。

以下は私のプログラムです。

sub receiveArray { 
    my $arrayref = @_; 
    @{$arrayref} = (4, 5, 6); 
} 

@ar = (1, 2, 3); 

print "Values of the function before calling the function\n"; 

foreach my $var (@ar) { 
    print $var; 
    print "\n"; 
} 

receiveArray(\@ar); 

print "Values of the function after calling the function\n"; 

foreach my $var (@ar) { 
    print $var; 
    print "\n"; 
} 

上記のコードの問題点は何ですか?

答えて

10

あなたが書くすべてのPerlファイルをuse strict; use warnings;で開始する必要があります。それはあなたがこのようなエラーを避けるのに役立ちます。

my $arrayref = @_; 

あなたはスカラーに配列を代入しているので、配列は、配列の要素数を生成するスカラーコンテキストで評価されています

問題は、この行です。あなたの代わりに何をすべき

は次のとおりです。(もしあれば、残りを無視して)

my ($arrayref) = @_; 

は、今では$arrayrefに最初の関数引数を入れ、リストの割り当てを使用しています。

リスト割り当てはperldoc perldata(「から始まる部分はに割り当てられている可能性があります)」に記載されています。

+0

ありがとうございました。それはうまくいった。しかし、私はまだ私の$ arrayref = @ _とmy($ arrayref)= @ _の違いを理解することができません。違いを教えてください。ありがとう – Sunil

+0

私はあなたにその違いを語った。どの部分が不明であるか説明できますか? – melpomene

+0

$ arrayrefの前後に中かっこを置くと、配列コンテキストでどのように評価されるのか分かりません。 – Sunil

関連する問題