質問

last がCで呼び出される break ではなく、Perlで呼び出されるという歴史的な理由は何ですか?

Perlの設計はC(awk、sed、shに加えて-下記のmanページを参照)の影響を受けたため、おなじみのCスタイルのbreak / lastの命名を行わない理由がいくつかあるに違いありません。

Perl 1.000(1987年12月18日リリース)のmanページの歴史:

  

[Perl]は(とにかく著者の意見では)C、sed、awk、shのいくつかの最高の機能を組み合わせているので、これらの言語に精通している人はそれほど難しくないはずです。 (言語史家は、csh、Pascal、さらにはBASIC | PLUSの痕跡にも気付くでしょう。)

役に立ちましたか?

解決

  

「break」または「last」のセマンティクスは   言語によって定義されます(この場合   Perl)、あなたではない。

     

「最後」を"と考えないのはなぜですか   のために実行する最後のステートメント   ループ"。

     

それはいつも奇妙だと思った   「C」の「continue」ステートメントは、   ループの次のパス。これは   間違いなく奇妙な使い方   「続行」の概念。しかし、それは   「C」のセマンティクスなので、私はそれを受け入れます。

     

特定のマッピングを試みることにより   プログラミングの概念を単一に   既存の意味を持つ英語の単語   常に何らかの種類があります   不一致の奇妙さ

ソース

さらに、ラリーウォールはちょっと変です。彼の写真を見ましたか?

 Larry Wall
(ソース: wired.com

他のヒント

これは、Perlがコンピューター科学者ではなく、言語学者によって作成されたためだと思います。通常の英語の使用法では、ループの最終パスを完了したことを宣言するという概念は、「最後」という単語とより強く結びついています。 ("これは最後のパスです")という言葉よりも" break" (" break the loop&quot ;?" break out of the loop&quot ;?-" break"がループの終了とどのように関係するかは明確ではありません) 。

「last」という用語は、即時のループ制御以外にも使用できることを思い出すと、より意味があります。上記の1つ以上のレベルのラベル付きブロックに適用できます 含まれているブロック:

 LINE: while( <> ) {
      WORD: foreach ( split ) {
           last LINE if /^__END__\z/;
           ...
           }
      }

「最後」と言うと、より自然に読みます。英語で、「最後の行が一致する場合は...」と読むと、

考慮する必要がある追加の理由があります:

最後は単なるループ制御ではありません。

sub hello {
  my ( $arg ) = @_; 

  scope: { 
      foo(); 
      bar(); 
      last if $arg > 4; 
      baz(); 
      quux(); 
  }
}

それ自体は、ループに限定されない一般的なフロー制御メカニズムです。もちろん、上記を1回まで実行するループとして一般化できますが、ループが存在しないということは&quot; Break?私たちは何から抜け出しますか?&quot;

代わりに、&quot; last &quot; &quot; 最後の ブレースの位置にジャンプします。これは、この目的のために、より意味的に賢明です。

say についてDamian Conwayに同じ質問をしていました。 Perl 6は say を導入します。これは、自動的に改行を追加する print にすぎません。私の質問は、なぜ echo を使用しないのかということです。これは、Bash(およびおそらく他の場所)で echo が行うことだからです。

彼の答えは: echo say より33%長いです。

彼はそこにポイントを持っています。 :)

ループの最後に移動するため。ラリーウォールは変な男だったからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top