2017-11-09 12 views
2
use feature 'say'; 
@arr = (1,2,3,4,5,6); 

for $x (@arr) 
{ 
    print $x; 
    @arr = (6,5,4,3,2,1) if $x == 3; 
} 

のために、アレイの再評価を停止するには、perlは出力を生成します:perlの再評価ループ内の配列を停止する方法はあり123321がどのように上記のコードではループ

をするように出力は代わりに123456ですか?

答えて

2

オーバー
@ary = 1..6; 

for $x (eval { @ary }) 
{ 
    print $x; 
    @ary = (6,5,4,3,2,1); 
}       # --> 123456 

を反復するために、リストを生成し、私は、これは好奇心や実験であることを期待しますが、私はまだコメントしてみましょう:その背後にある現実的な目標がある場合はより良い方法は確かにあります。

0

アレイを再割り当てしてループを終了する場合は、最後のコマンドを使用することをお勧めします。最後のコマンドはすぐにループを終了します。

use feature 'say'; 
@arr = (1,2,3,4,5,6); 

for $x (@arr) 
{ 
    print $x; 
    if (3 == $x) 
    { 
    @arr = (6,5,4,3,2,1); 
    last; 
    } 
} 

次に、@arrは割り当てられた配列になり、評価されません。最後のコマンドに関する情報へ

リンク: http://perldoc.perl.org/functions/last.html

+0

私は彼がけれども出力「123456」を望んでいたと思います。 – sborsky

1

あなたは、配列の浅いコピーを作成し、それを間接参照することができ、

use feature 'say'; 
@arr = (1,2,3,4,5,6); 

for $x (@{[ @arr ]}) 
{ 
    print $x; 
    @arr = (6,5,4,3,2,1) if $x == 3; 
} 
関連する問題