2017-03-20 9 views
0

次のコードで、私はScheduleRequestWrite(中出力を期待してい行くルーチンに配列を渡す:5,10する)間違った

sub ProcessItem 
{ 
    my @writeVal = ("5,10"); 

    foreach my $str (@writeVal) 
    { 
     print "\nProcessItem = $str\n"; 
    } 
    ScheduleRequestWrite(\@writeVal); 
} 

sub ScheduleRequestWrite() 
{ 
    my @write_value = $_[0]; 

    foreach my $str (@write_value) 
    { 
     print "\n$str\n"; 
    } 
} 

ProcessItem(); 

しかし、私は取得しています:ARRAY < 0x2ccf8>

は可能性が誰を私の間違いを指摘してください。前もって感謝します!

+4

配列ではなく配列参照を渡しています。 –

+0

配列参照を渡しているので、 'ScheduleRequestWrite()'に '$ _ [0]'を参照する必要があります: 'my @write_value = @ $ _ [0]' –

+2

@HåkonHægland間違っています。 '@ {$ _ [0]}'。逆参照を '$ _'と書いたものは、参照配列の0番目のインデックスのスライスを取得します。しかし、与えられた答えのように、変数に参照が含まれているほうがよい。 – ysth

答えて

6

配列リファレンス\@writeValを渡してから、その参照を配列@write_value ...で使用しています。そのため、配列@write_valueには1つの項目、別の配列への参照があります。

あなたは、配列のコピーを作成したmy @write_value = @{$_[0]};を意味しているか、またはあなたが直接、元の配列をループすることを意図していることがあります。

sub ScheduleRequestWrite 
{ 
    my $write_value = $_[0]; 

    foreach my $str (@$write_value) 
    { 
     print "\n$str\n"; 
    } 
} 

を(また、あなた以来()プロトタイプをしたくないはパラメータを取得しています!プロトタイプをオフにしておきます)

関連する問題