このループは決して停止しない:これらの例でPerlで "最後の"動作が異なるのはなぜですか?
while (1)
{
while (1)
{
last;
}
}
をこのループはlast
なければ
while (1)
{
do
{
last;
}
while (1);
}
を停止し、彼らは無限に似ています。 2番目のループ構造は、内部ループをループと見なさないようです。私は2番目の構造であると推定していますlast
は実際には内側のループが始まる前に外側のループを終了します。しかし、なぜ? do{}
が最初の実行を完了した後、内側ループが実際に「後で」開始しますか? perldoc -f last
から
'はperldoc -f do':「ループ制御文' next'、 'last'、または' redo'ができないので、 'BLOCK'は、ループとしてカウントされませんありません。ブロックを終了または再起動するのに使用することができます。 " –
@ikegami - 'perl -E 'と言う($ _)、最後は5 .. 10' –
@ JimDavis面白いです。 'for'は' while'/'until'とは異なるセマンティクスを持ちます(' perl -e'last whileは '1 'は' 'ループブロックの外側で' 'Canできません'')。 'for'ステートメント修飾子にラベルを付けることができますが、' while'では 'perl -E'FOO:1.10'の最後のFOOとラベル付けすることはできません。 '1 while'、 'while(1){1}'、 '1 for 1'、' {1} 'のB :: Concise出力も比較してください。 '1 while 1'は' leaveloop'オペコードを生成します。 – ThisSuitIsBlackNot