昔から議論になっている事ですが、結局の所どっちがどうなのでしょう?
私自身は Perl 屋ですが、Perl が PHP に負けているという事も無いような気がします。
しかし、人力検索でも随分と PHP の質問が多いように感じられます。Perl はどこですか?みたいな。
言語仕様的な面からそれぞれのメリットとデメリットを述べられる方はおりますか?
平たく言えば、Perl にできて PHP にできない、またはその逆について解説して頂きたいのです。
そして面白い事に、国内のブラウザゲームの大半は何故か Perl で記述されています。
最近は PHP も増えてきた感じもするのですが、中身を見るとそのソースは Perl もどきだったりもします。
個人的には Perl で全てが済むと思うのですが、何故にして PHP を使うのでしょうか?
PHPはその取り扱いの簡便さがメリットです。
安いレンタルサーバにファイルを置くだけで動いてしまうので、CGIのようにパーミッションを気にしたりする必要が(あんまり)ありません。
またmod_phpがよく出来ていて、mod_perlのようにファイルが更新されてもサーバを再起動する必要がありません。反応速度もかなり速いです。
実際にはphp-cliなどで試すとすぐ分かる通りPerlのほうが圧倒的に速いのですが、mod_phpの優秀さのおかげでたいていの場面でPHPはPerl/CGIより高速です。
$ time php -r 'for ($i = 0; $i < 1000000; $i++) { print $i; }' > /dev/null 3.96 real 1.86 user 1.42 sys $ time perl -e 'for ($i = 0; $i < 1000000; $i++) { print $i; }' > /dev/null 0.89 real 0.67 user 0.01 sys
mod_perlは安いレンタルサーバで使えないので、単価の安くなりがちなウェブ系の案件では使う理由が無くなってしまいます。
またPHPはその拡張モジュールも含めてたいていのレンタルサーバにインストールされてるので、冗談みたいに聞こえますがコマンドラインの扱えないプログラマでもデプロイできてしまうのです。
このように簡単でそこそこ早いというのは、単価の安いエンジニアを使えるというメリットがあります。デザイナーに毛が生えた程度のPHPプログラマでもなんとなく動くものが作れてしまう上に、たいていのお客さんは動いてさえいれば中の品質を評価するのは無理なので、安い方に流れてしまいがちなんですね。
翻ってPerlはプログラマのレベルが大きく3つの段階に分かれます。
1のプログラマが書いたPerlのコードはPHPの単価の安いプログラマが書いたものとたいして変わりが無く、たいていのプログラマにとって読みにくくメンテが難しいかほぼ不可能な状態になります。
2のプログラマが書いたPerlのコードは1のプログラマには何をやってるのかわからず、3のプログラマにとっては非常に読みにくいコードになります。
3のプログラマが書いたPerlのコードは非常にきれいで読みやすいのですが、1や2のプログラマには何をやってるのかさっぱりわからなくなります。
この3つの段階によって、Perlはあたかも別の言語のように各レベルごとのプログラマにしか読めないコードになりやすいのです。
これはメンテナンスの継続性、後任探しに非常に問題があります。
というわけでRubyやPythonを使いましょう。
あとコメントでPerlはデバッグしずらいと言ってる人がいますが、これはウソです。
ちゃんとテストを書いたりデバッガを使いましょう。
モダンPerlの世界にいる限りなら、プログラム言語としてのPerlは決して悪くないです。
PHP と Perl/CGIの比較をしてみましょう。
以前も私はPerlばかり書いていましたが、
今は、どちらがよいかというと、個人的な意見としてはやはりPHPです。
それは、WEBアプリ用として沢山の標準的に使える関数が装備されており、Perlのようにモジュールを入れなくともほぼなんでも出来てしまうからです。
※Perlもモジュールを入れれば何でも出来ますが、面倒だったりします^^;
PHPでは、例えば、fopen で他のURLのファイルを開けたり、ApacheのBasic認証のパラメータを取得できたり、URLを分解できたりなど、その他数多くのライブラリが標準で使えます。
あと、Perlに比べてドキュメントが非常にしっかりしています。掲示板やMLなどで質問などしなくとも、ドキュメントにサンプルが載っているため、比較的簡単かつスピーディーに関数などを使えます。
あと、サーバ負荷の面でPerlより軽いというのがあります。
Perl も mod_perl という方法もありますが、コーディング方法が普通の記述法と変わってきたり結構面倒です。Apacheのモジュールとして動作するので、毎回OSがプロセスを起動するPerlに比べて非常に高速であるといえます。
それに、デバッグもphpは簡単です。print_r や var_dump といった変数出力用関数が標準で備わっており、配列のデータにどんなデータが入っているか、というのをビジュアルに表示してくれます。
ふむふむ…。
私はかなり引用回答を嫌っているのですが、文面としては参考にはなります。
> あと、サーバ負荷の面でPerlより軽いというのがあります。
やー、この辺りが都市伝説っぽい気もするのですよねー。
mod_perl vs PHP なんてベンチマークも見た事がありませんし…それがあれば結果を見てみたかったりもします。
ライブラリが使えるというのは、(プログラム的な) 資産があれば同じ事を Perl でも実現できる訳でして、
その辺りは Windows アプリを作る際に Windows32 API を叩くのとはちょっと違うのではないのかなとか。
この話では「PHP の方が情報が多いので (結果的に人件費的なコストも下がって) 有利」という事にもなると思うのですが、
それは言語仕様的な問題ではないような気がするのです。
例えば、そこらの素人集団 5 人が PHP を使うのと、id:b-wind さんによる Perl ならば後者の方が圧倒的に優れている筈です (開発速度も速いでしょうし、1 人なら人件費も抑えられます)。
何だかよく分からないのですよー。
・1さんも言われているように、phpはオールインワンの環境でライブラリなどをひっぱってくる必要がない。だから初心者にも入り易い。
・データベースとの連関がよいので、データベースを使っているウェアが多い昨今では、有利である。
・phpの中にはperl互換の関数が用意されているので、perlでできることはphpでもできる。その逆は真ではない。
・公式ドキュメントの充実というの大きいと思います。ここはmysqlとも同じですね。
・あとこれは直接関係ないが、phpで作られている最近のウェアの方が見た目がきれいなのが多い。perlのは昔風の見た目が多い。
> ・phpの中にはperl互換の関数が用意されているので、perlでできることはphpでもできる。その逆は真ではない。
これは知りませんでした、そういうのがあるのですね。
逆は無理でしょうね、PHP って C のポインタみたいな感じで変数を扱ったりするケースがあった気がするのです。
(※↑なんだかすごい語弊がある気がしますが、PHP は少ししか触った事がないもので(汗;)
> ・あとこれは直接関係ないが、phpで作られている最近のウェアの方が見た目がきれいなのが多い。perlのは昔風の見た目が多い。
これは確かにありますね(笑)
何ででしょうね、Perl 屋さんって見た目には拘らないのでしょうか、PHP って素敵なデザインのプログラムが多いですよね。
やろうと思えば Perl でも同じ事はできる筈なのですが~。
私は普段は両方を使っていますが使い分け基準が何かあって使い分けているわけでもなくおおむね雰囲気で使い分けています。
使い方の違いがあるというだけで正直に言ってどちらにメリットがあると言うようなことはないと思います。
開発環境はeclipseを使っていますが、特にどちらが開発しやすいという違いは感じません。
言語仕様と言っても所詮どちらもチューリングマシンで動作する言語という点では同じですので書き方の違いがある程度の違いしか感じていません。
秋田弁と山形弁を比べて違いはあるけどどちらかにメリットがあると思えないのと同じです。
言語仕様の違いは確かに多少ありますが決定的にここが異なるというような点も見受けられないですね。
そこで、強いて言うのなら、、、
レンタルサーバーで
perlしか使えないサーバーがある->perlを使用
phpしか使えないサーバーがある->phpを使用
ということと、
phpはバージョンによってプログラムを直さないといけない。php5になってからずいぶんと書き直す手間が必要でした。
多くのlinuxのディストリビューションでperlはここ数年、5.8でバージョンが安定していてこれ以上はバージョンが上がらない雰囲気があるので安心
という違いがあります。
書き方の違いで見るとperlよりもphpはcっぽく書ける点の違いはあります。
私の想像ですが、使い分けているのは言語使用が異なっていてどちらかに魅力があって使い分けているのではなくて、社内で昔からこっちを使っていたとか、サーバーがこれしか使用できないからといった環境面での理由が大きいのではないでしょうか。
> 使い分けているのは言語使用が異なっていてどちらかに魅力があって使い分けているのではなくて、
そうかもしれませんね。
私はたまたま Perl を先に触ったので、Perl 屋さんになっちゃいましたが、
PHP を触っていたら PHP 屋さんになっていたと思います (そうだったら良かったと思うのですが、何だかくやしいです(笑))。
何かですね、Perl 一本の私から見るとこう…世間から「Perl なんて時代遅れだよね」みたいな匂いを感じるのです。
ネットでは新しい情報もあまり語られませんし (既に出尽くしているからというのもあるのかもしれませんが)、使っている人にもパワーが感じられないといいますか…。
最近は「すごい Perl 製プログラム」とか全然見ないんですよね。PHP のは「おお、これはすごいね」と思えるのを何本も見たのですが。
Perl 屋さん、もっと頑張って~(>_<)
平たく言えば、Perl にできて PHP にできない
無い。逆もない。
まぁ Perl の変態的な部分は真似できないがする必要もない。
個人的には Perl で全てが済むと思うのですが、何故にして PHP を使うのでしょうか?
All in One だから。
標準状態で大抵の処理は関数化されている。
素人にはオブジェクト指向なんて邪魔以外の何者でもないからね。
それとベースの HTML の中に少しコードを入れるだけで始められるところも
受けがいい理由の一つだろう。
あと Perl は過去の遺物であるCGIのイメージに引っ張られすぎ。
モダン Perl という用語もあるが、まだ浸透しているとは言い難い。
mod_perl vs PHP なんてベンチマークも見た事がありませんし…それがあれば結果を見てみたかったりもします。
さがせばわりあい有るよ。
あと、どうせ比べるなら PHP も CGI モードでないと不公平だねぇ。
mod_perl ばっかりフューチャーされるけど自分的には CGI::SpeedyCGI お勧め。
SpeedyCGI - CGIスクリプトを常駐させて実行することによりスピードアップさせます
注意点はあるけど、普通のコードなら CGI から改変無く動く。
あと既存回答についてちょっと突っ込み。
・データベースとの連関がよいので、データベースを使っているウェアが多い昨今では、有利である。
「データベースとの連関がよい」の意味が分かんないな。今時DBに関連しない言語なんて実用ではほぼ無いだろ。
・phpの中にはperl互換の関数が用意されているので、perlでできることはphpでもできる。その逆は真ではない。
勘弁して。perl 互換関数は正規表現ぐらいでしょ。
歴史的に PHP は Perl もどきから発祥してるけど、良くも悪くも独自の方向性を持ってる。
Perl はフィルター機能で自身の文法すら拡張できるから php もどきにだって出来る。
やる意味もないし、やるべきでもないけど。
悪い意味での柔軟性もあるので、ほぼ Perl に不可能はない。
コメント欄も含めまして、大変素晴らしい回答をありがとうございます。
CGI::SpeedyCGI というのは知りませんでしたので、後程ちょっと調べて遊んでみようかと思います。
> All in One だから。
> 標準状態で大抵の処理は関数化されている。
結局のところ、言語仕様云々よりもとっつきやすくて平均的な発速度が早い = コストダウンにもなる上、
結果的に使うユーザーは増え続けるので情報の出回りも良くなる…みたいな側面もあるのでしょうかね。
> 悪い意味での柔軟性もあるので、ほぼ Perl に不可能はない。
やっぱりそうですよね!なんて思ってしまうのですが(^-^;
---------
全然関係無いのですが…青スターを付けようとしましたら、現在スターに不具合が起きていて黄色以外のスターが付けられないみたいです。
携帯電話っぽく UA を擬装すれば付けられるそうで、どうしてそんな不具合が発生するのかさっぱり意味が分かりません(笑)
PHPはその取り扱いの簡便さがメリットです。
安いレンタルサーバにファイルを置くだけで動いてしまうので、CGIのようにパーミッションを気にしたりする必要が(あんまり)ありません。
またmod_phpがよく出来ていて、mod_perlのようにファイルが更新されてもサーバを再起動する必要がありません。反応速度もかなり速いです。
実際にはphp-cliなどで試すとすぐ分かる通りPerlのほうが圧倒的に速いのですが、mod_phpの優秀さのおかげでたいていの場面でPHPはPerl/CGIより高速です。
$ time php -r 'for ($i = 0; $i < 1000000; $i++) { print $i; }' > /dev/null 3.96 real 1.86 user 1.42 sys $ time perl -e 'for ($i = 0; $i < 1000000; $i++) { print $i; }' > /dev/null 0.89 real 0.67 user 0.01 sys
mod_perlは安いレンタルサーバで使えないので、単価の安くなりがちなウェブ系の案件では使う理由が無くなってしまいます。
またPHPはその拡張モジュールも含めてたいていのレンタルサーバにインストールされてるので、冗談みたいに聞こえますがコマンドラインの扱えないプログラマでもデプロイできてしまうのです。
このように簡単でそこそこ早いというのは、単価の安いエンジニアを使えるというメリットがあります。デザイナーに毛が生えた程度のPHPプログラマでもなんとなく動くものが作れてしまう上に、たいていのお客さんは動いてさえいれば中の品質を評価するのは無理なので、安い方に流れてしまいがちなんですね。
翻ってPerlはプログラマのレベルが大きく3つの段階に分かれます。
1のプログラマが書いたPerlのコードはPHPの単価の安いプログラマが書いたものとたいして変わりが無く、たいていのプログラマにとって読みにくくメンテが難しいかほぼ不可能な状態になります。
2のプログラマが書いたPerlのコードは1のプログラマには何をやってるのかわからず、3のプログラマにとっては非常に読みにくいコードになります。
3のプログラマが書いたPerlのコードは非常にきれいで読みやすいのですが、1や2のプログラマには何をやってるのかさっぱりわからなくなります。
この3つの段階によって、Perlはあたかも別の言語のように各レベルごとのプログラマにしか読めないコードになりやすいのです。
これはメンテナンスの継続性、後任探しに非常に問題があります。
というわけでRubyやPythonを使いましょう。
あとコメントでPerlはデバッグしずらいと言ってる人がいますが、これはウソです。
ちゃんとテストを書いたりデバッガを使いましょう。
モダンPerlの世界にいる限りなら、プログラム言語としてのPerlは決して悪くないです。
これまた詳細な素晴らしい回答をありがとうございます。
> デザイナーに毛が生えた程度のPHPプログラマでもなんとなく動くものが作れてしまう上に、
> たいていのお客さんは動いてさえいれば中の品質を評価するのは無理なので、安い方に流れてしまいがちなんですね。
なるほど、やはりこの辺りが根っこになっているみたいですね~。
そうなりますとやはり Perl 派は今後も減っていきそうですよね、PHP に流れる…どころか Ruby も最近勢力が強くなってきている感じがしますし。
> この3つの段階によって、Perlはあたかも別の言語のように各レベルごとのプログラマにしか読めないコードになりやすいのです。
なるほどなるほど、本当に Perl のコードって多種多様ですよね。
それ故に後から入った方がメンテナンスをするのは非常に大変だったりします、ええ…。
> というわけでRubyやPythonを使いましょう。
長期的に見たらそれが最善なのかもしれませんが、
なかなか過去の資産 (自分が作成した関数など) とか捨てられないものでして(苦笑)
(実は Ruby にはちょっと興味があったりはするのです)
これまた詳細な素晴らしい回答をありがとうございます。
> デザイナーに毛が生えた程度のPHPプログラマでもなんとなく動くものが作れてしまう上に、
> たいていのお客さんは動いてさえいれば中の品質を評価するのは無理なので、安い方に流れてしまいがちなんですね。
なるほど、やはりこの辺りが根っこになっているみたいですね~。
そうなりますとやはり Perl 派は今後も減っていきそうですよね、PHP に流れる…どころか Ruby も最近勢力が強くなってきている感じがしますし。
> この3つの段階によって、Perlはあたかも別の言語のように各レベルごとのプログラマにしか読めないコードになりやすいのです。
なるほどなるほど、本当に Perl のコードって多種多様ですよね。
それ故に後から入った方がメンテナンスをするのは非常に大変だったりします、ええ…。
> というわけでRubyやPythonを使いましょう。
長期的に見たらそれが最善なのかもしれませんが、
なかなか過去の資産 (自分が作成した関数など) とか捨てられないものでして(苦笑)
(実は Ruby にはちょっと興味があったりはするのです)