2013-08-25 5 views
5

次の行は完全にPostfixが動作していない

for(my $i=0; $i < ($max_size - $curr_size) ; $i++){ 
    push (@{$_}, 0); 
} 

に動作します。しかし、この1はしていません。

push (@{$_}, 0) for (1 .. ($max_size - $curr_size)); 

それは私にこのようなエラーメッセージが得られます。

Can't use string ("1") as an ARRAY ref while "strict refs" in use at coordReadEasy.pl line 124, <DATA> line 16. 

はなぜ?どうすればこの問題を解決できますか?

答えて

11

forの範囲のバージョンは$_を各要素に設定していますので、@{$_}では$_をあたかも配列参照のように参照しようとしています。

for my $x (1..10) { 
    print "$x\n" 
} 

for (1..10) { 
    print "$_\n" 
} 

print "$_\n" for (1..10); 

簡単な解決策は、あなたの配列参照のために別の変数を作成することです:これらはすべて同じです

push @{$ref}, 0 for 1 .. $max_size - $curr_size; 
+3

でも簡単に: '@の$ REF =(0)×($ MAX_SIZE - $のcurr_size) ':) – friedo

+3

@friedoこれは以前から配列にあったものを上書きします。あなたは 'push @ $ ref、(0)x($ max - $ curr)'を実行するかもしれません。 – TLP

+5

私は追加したい:**あなたは、後のループで異なる変数を使うことはできません、 '$ _'のみ** – gaussblurinc

関連する問題