ハトネコエ Web がくしゅうちょう

プログラミングやサーバー・Web制作、チームマネジメントなど得た技術のまとめ

初めてPerlに触れてみての感想

特に解説記事というわけでもなく、筆の走るままに感想を。

入門にはPerl入学式の教科書がとても役立ちました。
id:papix 先生ありがとう……

Perl 自体への感想

  • 全体的に、シェルスクリプトRubyの中間みたいな文法。生まれを考えればまあ、そうだよね
  • true, false がない。1, 0 で表現する
  • == や != は数値比較に用いて, eq や ne は文字列比較に使うと決まってるの、あまり他の言語に見られない仕様。シェルスクリプトっぽい。数値か文字列か入りうる変数があると、比較の際に困りそう
  • 見た目はシェルスクリプトRubyっぽいので、文末のセミコロン忘れやすい問題
  • 配列の連結が my @arr3 = (@arr1, @arr2); だけで済むの簡単でいい……。
  • 一方、その仕様のせいで関数に渡すときは some_method(\@arr1, \@arr2) と参照渡しを強いられるのがめんどい
  • 2次元配列や入れ子のハッシュなどを書くときは、参照を意識しないといけないのがやや難しくめんどくさい。$, @, % の使い分けをしっかりマスターしたい。
  • PHPRubyみたく豊富な便利メソッドがあるわけではないので、実装力が問われる

CGI の時代が終わったわけ

Perl を調べてたら PSGI というWebアプリケーションサーバーの規格と、リファレンス実装の Plack というものを知り、
逆に CGI が廃れた理由を知ったのでメモ。

CGIが最も古典的でシンプルな実行方法として知られているが、クライアントからのリクエストのたびにプロセスの起動・破棄を行うため、サーバへの負担が大きく、ユーザへのレスポンスにも時間がかかる。また、このような起動形態ではデータベースとの接続といった必要な初期化も毎回行わなければならない。

https://ja.wikipedia.org/wiki/PSGI より引用)

『リクエストのたびにプロセスの起動・破棄を行う』ってヤバそう。
アクセス集中したらプロセスが何個も起動して、サーバー負荷がすごいことになりそう。
たしかにそれなら CGI 設置不可のレンタルサーバーとかあるよなと。

あと、アクセスのたびに initializer 的な初期設定の読み込みをするということで、普通に時間かかりそう。

おもしろい比較動画がありました。
nginx + PSGIApache + CGI で、全てのページを読み込むのにどれだけの差が生まれるのかという動画です。

だいたい 1:12(72s) と 1:56(116s) のところでそれぞれ終わるという差!
たぶんこの実験では Apache と nginx の違いによる性能差はそんな無いと思うので、
やっぱ CGI 時間かかるんだなぁという感想。