私はPerl 5を学ぶつもりで、今までPHPしか使っていなかったので、言語の違いについて少し知りたいと思いました。
PHPが「Perlハック」のセットとして始まったとき、PHPは明らかにいくつかのPerl機能のクローンを作成しました。
構文の主な違いは何ですか?Perlでは、何かを表現するためのオプションや方法が増えるのは本当ですか?
Perlが動的Webサイトで使用されなくなったのはなぜですか?PHPの人気が高まった理由は何ですか?
私はPerl 5を学ぶつもりで、今までPHPしか使っていなかったので、言語の違いについて少し知りたいと思いました。
PHPが「Perlハック」のセットとして始まったとき、PHPは明らかにいくつかのPerl機能のクローンを作成しました。
構文の主な違いは何ですか?Perlでは、何かを表現するためのオプションや方法が増えるのは本当ですか?
Perlが動的Webサイトで使用されなくなったのはなぜですか?PHPの人気が高まった理由は何ですか?
回答:
PerlとPHPは似ています。Perl 6はまだ開発中であるため、Perl 5について考えてみましょう。主題ごとに大まかにグループ化されたいくつかの違い:
=~
!~
qw
qx
**
x
..
...
@
instanceof
Universal::isa
clone
ます。new
です。Perlでは、これはパッケージで定義されたオブジェクト作成サブルーチンの従来の名前であり、言語に関する限り、特別なことは何もありません。Perlの論理演算子は引数を返しますが、PHPではブール値を返します。試してください:
$foo = '' || 'bar';
各言語で。Perlでは、$foo ||= 'default'
まだ設定されていない場合は、$ fooを値に設定することもできます。PHPでこれを行う最も簡単な方法は、$foo = isset($foo) ? $foo : 'default';
(更新、PHP 7.0以降で実行できます$foo = $foo ?? 'default'
)
$foo
別の変数は、以下です@foo
か、%foo
。extract
関数の作成に限定されています。undefined
(perldataを参照)。PHPの配列はまばらです。要素を設定しても、間にある要素は設定されません。array_slice
してスライスを抽出し、スライスarray_splice
に割り当てます。local
。goto
ます。Perlはリストを平坦化します(perlsubを参照)。平坦化されていないデータ構造の場合は、参照を使用します。
@foo = qw(bar baz);
@qux = ('qux', @foo, 'quux'); # @qux is an array containing 4 strings
@bam = ('bug-AWWK!', \@foo, 'fum'); # @bam contains 3 elements: two strings and a array ref
PHPは配列をフラット化しません。
BEGIN
、UNITCHECK
、CHECK
、INIT
とEND
)実行されます。PHP auto_prepend_file
やとは異なりauto_append_file
、各タイプのコードブロックの数に制限はありません。また、コードブロックはスクリプト内で定義されますが、PHPオプションはサーバーおよびディレクトリごとの構成ファイルで設定されます。$bam[-1]
配列の最後の要素です。PHPの負の添え字は、他の添え字と同じです。$obj->method(@args)
ようなものに翻訳されます(ref $obj)::method($obj, @args)
。非網羅的なリスト:
$this
メソッドに特別な変数を自動的に提供します。Perlはオブジェクトへの参照を最初の引数としてメソッドに渡します。@ISA
変数を使用して継承を動的に変更できます。//
は演算子です。PHPでは、1行コメントの始まりです。create_function
関数)をひどくサポートし、クロージャーをサポートしていませんでした。$@
(のeval
代わりにtry
、のdie
代わりにthrow
)の値をチェックします。PHPは、Phantom of the ParadiseがPhantom of the Operaに、またはStrange BrewがHamletに触発されたのと同じ方法で、Perl に触発されました。Perlを学習するときは、PHPの動作の詳細を頭に入れておかないようにするのが最善です。そうしないと、つまずきます。
今は頭が痛いのでやめます。
@array = qw(a b c)
、あなたがやる$array[4] = 'e'
、配列の内容は正確ではありません('a', 'b', 'c', undef, 'e')
。彼らがしている('a', 'b', 'c',
、存在しません、'e')
。つまり、[3]
スロットはundefであるスカラーへのポインターを保持しません。それは何も保持していません(そしてexists
オペレーターはこれをテストします)。小さな違いですが、違いがあります。:)
$foo
がまだ設定されていない場合であってもよいisset($foo) || $foo='default';
ほとんどのPHP対Perlページは、
<不完全な理由をここに挿入>するため、PHPはPerlより優れています。
ilk、そしてめったに妥当な比較をしません。
構文的には、PHPの方がPerlよりも理解しやすいことがよくあります(特に経験が少ない場合)。たとえば、PHPで先頭と末尾の空白の文字列をトリミングするのは簡単です。
$string = trim($string);
Perlではそれはやや不可解です
$string =~ s/^\s+//;
$string =~ s/\s+$//;
(これは、単一行のキャプチャと置換よりも少し効率的で、少し理解しやすいと思います。)ただし、PHPは英語に似ていることが多いですが、低レベルCのラッパーとしてルーツが表示される場合があります。例えば、strpbrk
そしてstrspn
ほとんどのPHPのdabblersではなく、マニュアルを探索時間を費やすよりも、あまりにも難解な何のために自分の同等の機能を書くので、おそらくめったに使用されません。誰もがPerlのようなものに平等に取り組み、ゼロから学ぶ必要があるため、英語が第二言語であるプログラマーについても疑問に思います。
私はすでにマニュアルについて述べました。PHPにはすばらしいオンラインマニュアルがありますが、残念ながら必要です。パラメータの順序や関数の命名規則など、単純である必要があるものについては、時々参照します。Perlで、あなたはおそらく、あなたが手動のAを参照しているでしょう多くのあなたが始めると、その後一日、あなたは持っていますA-haの瞬間をし、再びそれを必要はありません。まあ、少なくともあなたがより高度になり、複数の方法があるだけでなく、おそらくより良い方法があること、他の誰かがおそらくそのより良い方法ですでにそれを行っていること、そしておそらくCPANにアクセスする必要があることに気付くまでは、そうではありません。
Perlには、物事を表現するための多くのオプションと方法があります。これは必ずしも良いことではありませんが、賢く使用すれば、コードを読みやすくすることができます。自分が陥り がちな特定のスタイルやイディオムがあります。一般的な問題をすばやく解決するために、Perlのベストプラクティス (後でではなく、すぐに)とPerlクックブック第2版を読むことを強くお勧めします。
共有ホスティング環境でPerlがあまり使用されない理由は、これまでCGIの認識された速度低下と、セキュリティと構成の問題のためにホストがmod_perlをインストールすることを望まないことがPHPをより魅力的なオプションにしたためだと思います。その後、サイクルが続き、より多くのホストがPHPを提供するようになったため、より多くの人々がPHPの使い方を学びました。速度の違いとセキュリティの問題は、最近FastCGIによって疑わしくなっています。ほとんどの場合、PHPはWebサーバーのコアに残されるのではなく、FastCGIも実行されます。
これが事実であるかどうかにかかわらず、PHPは人気を博し、無数のアプリケーションがその中に書かれています。シンプルなブログやフォトギャラリーを備えたエントリーレベルのウェブサイトが必要な大多数の人にとって、ホストが宣伝するのはPHPだけです。必要に応じて、Perl(または選択した他のもの)の使用を妨げるものは何もないはずです。
エンタープライズレベルでは、本番環境でPHPが多すぎるとは思えません(Facebookの反例として、誰も指摘しないでください。エンタープライズレベルだと言っています)。
$str =~ s/^\s+|\s+$//g;
PerlはWebサイトで多く使用されています。たとえば、PythonやRuby以上です。とはいえ、PHPは他のどれよりも頻繁に使用されています。その中で最も重要な要素は、PHPのデプロイメントの容易さ、およびPHPの使いやすさです。
構文の違いは多すぎてここで要約することはできませんが、一般的には、自分を表現する方法が多いのは事実です(これはTIMTWOTDIと呼ばれ、実行する方法は1つではありません)。
Perlの私のお気に入りは、配列/リストの処理方法です。これは、Perl関数(または「サブルーチン」)を作成して使用する方法の例です。これは、これを引数に使用します。
sub multiply
{
my ($arg1, $arg2) = @_; # @_ is the array of arguments
return $arg1 * $arg2;
}
PHPではで同様のことができますが、list()
まったく同じではありません。Perlでは、リストと配列は実際には同じように扱われます(通常)。次のようなこともできます:
$week_day_name = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")[$week_day_index];
また、知っておく必要があるもう1つの違いは、数値/文字列比較演算子です。あなたが使用している場合はPerlでは、<
、>
、==
、!=
、<=>
、というように、Perlは数字に両方のオペランドを変換します。あなたの代わりに文字列として変換したい場合は、あなたが使用する必要がありlt
、gt
、eq
、ne
、cmp
(事業者のそれぞれの同等物は、以前に記載されています)。これが本当に役立つ例:
if ("a" == "b") { ... } # This is true.
if ("a" == 0) { ... } # This is also true, for the same reason.
私はoutisの素晴らしい答えに何も追加する必要はありません、あなたの質問に対する答えだけを示したいです:
Perlが動的Webサイトで使用されなくなったのはなぜですか?PHPの人気が高まった理由は何ですか。
最初にいくつかの「Job Trends」サイトを確認してください-一人で判断できます。
ご覧のように、perlは依然としてリーダーですが、おもちゃではなく実際のアプリケーションに適しています。:)