私はPerl 5を学ぶつもりで、今までPHPしか使っていなかったので、言語の違いについて少し知りたいと思っていました。
PHPは「Perlハック」のセットとして開始されたため、明らかにPerlの機能の一部を複製しました。
構文の主な違いは何ですか? Perlには、何かを表現するためのより多くのオプションと方法があるのは本当ですか?
Perlが動的なWebサイトに使用されなくなったのはなぜですか?何がPHP=の人気を集めましたか?
PerlとPHPは似ているよりも異なります。 Perl 6はまだ開発中なので、Perl 5を考えてみましょう。いくつかの違いは、おおよそ主題ごとにグループ化されています:
=~
_、_!~
_ )、 quote-like (qw
、qx
&c。)、 exponentiation (_**
_)、 string repeat (x
)および range (_..
_および_...
_)。 PHPには、Perlにない演算子がいくつかあります。たとえば、 エラー抑制演算子 (_@
_)、 instanceof
(Perlには_Universal::isa
_メソッドがあります)および clone
。new
は演算子です。 Perlでは、これはパッケージで定義された オブジェクト作成サブルーチン の従来の名前であり、言語に関する限り特別なものではありません。Perlの論理演算子は引数を返しますが、PHPでは return booleans を返します。試してください:
_$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
キーワードを介して dynamic scoping をサポートします。goto
関数を介して明示的な tail calls をサポートします。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は同様にPerlに触発されましたPhantom of the ParadiseはPhantom of the Opera、またはStrange Brewは、Hamletに触発されました。 Perlを学習するときは、PHPの動作仕様を頭から外すのが最善です。そうしないと、つまずきます。
今、私の脳が痛いので、やめます。
PHPが登場したとき、誰もがPerlとの主な違いに感銘を受けました。
<?php ... ?>
どこでも。退屈なテンプレートはありません。時間が経つにつれて、誰もが彼らが利益ではないことを学びました...
ほとんどのPHP対Perlページは、
<ここにラメの理由を挿入>
ilk、および合理的な比較を行うことはめったにありません。
構文的には、PHPは多くの場合、Perlよりも理解しやすいことがわかります(特に経験がない場合)。たとえば、PHPの先頭および末尾の空白の文字列をトリミングするのは単純です
$string = trim($string);
Perlでは、やや不可解です
$string =~ s/^\s+//;
$string =~ s/\s+$//;
(これは、1行のキャプチャと置換よりもわずかに効率的であり、もう少し理解しやすいと思います。)ただし、PHPは多くの場合英語に似ていますが、低レベルC、たとえば、strpbrk
およびstrspn
はおそらくほとんど使用されません。ほとんどのPHPダブラーは、マニュアルの探索に時間を費やすのではなく、難解すぎるものに対して独自の同等の関数を作成するためです。 。また、英語が第二言語であるプログラマーについても疑問に思います。誰もがPerlのようなものと対等な立場にあり、英語をゼロから学ぶ必要があるからです。
マニュアルについてはすでに言及しました。 PHPには素晴らしいオンラインマニュアルがありますが、残念ながらそれは必要です。パラメーターの順序や関数の命名規則など、単純であるべきことについては、時々それを参照しています。 Perlを使用していると、おそらくマニュアルを参照していることに気付くでしょうlot始めると、いつかa -ha瞬間であり、二度とそれを必要としません。まあ、少なくともあなたがより高度になり、複数の方法があるだけでなく、おそらくもっと良い方法があることに気付くまでは、おそらく他の誰かがすでにそれをより良い方法で行っているので、おそらくあなたはCPANを訪れるべきです。
Perlには、物事を表現するためのより多くのオプションと方法があります。これは必ずしも良いことではありませんが、賢明に使用すればコードを読みやすくすることができますし、少なくともあなたがよく知っている方法の1つです。特定のスタイルとイディオムがあり、自分自身が陥りやすいと思うので、 Perl Best Practices (後でなくて早い)、 Perl Cookbook、 Second Edition を使用して、一般的な問題の解決方法を迅速に把握できます。
共有ホスティング環境でPerlがあまり使用されない理由は、セキュリティと設定の問題のために、歴史的にCGIの速度の低下とホストのインストールの不本意 mod_Perl が原因であると考えていますPHPより魅力的なオプション。その後サイクルが続き、より多くのホストがそれを提供したため、より多くの人がPHPを使用することを学びました。速度の違いとセキュリティの問題は、最近では FastCGI によって無意味になり、ほとんどの場合、PHPは、FastCGIのコアに残されるのではなく、同様にFastCGIを使い果たします。 Webサーバー。
これが事実であるかどうか、または他の理由があるかどうかにかかわらず、PHPは人気を博し、無数のアプリケーションがその中に書かれています。単純なブログまたはフォトギャラリーを備えたエントリーレベルのWebサイトが必要な人の大多数にとって、PHPが必要なだけなので、ホストはそれを促進します。必要に応じて、Perl(または他の選択したもの)の使用を妨げるものは何もありません。
エンタープライズレベルでは、実稼働環境でPHPが多すぎるとは思わないでしょう(そして、反例としてFacebookに誰も触れないでくださいenterpriseレベル)。
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.
_
Perlは、Python and Rubyなど。以上。それは、PHPその中で最も重要な要素は、PHPの展開の容易さと、PHPの使いやすさです。
構文の違いはあまりにも多く、ここで要約することはできませんが、一般的に、より多くの表現方法があることは事実です(これはTIMTWOTDIとして知られています。
私はoutisの素晴らしい答えに何も追加する必要はありません、私はあなたの質問の答えを表示したいだけです:
Perlが動的なWebサイトに使用されなくなったのはなぜですか?何がPHP=それよりも人気を得たのですか?
最初にいくつかの「ジョブトレンド」サイトを確認してください-そして、あなただけで判断を下すことができます。
ご覧のとおり、Perlは依然としてリーダーですが、おもちゃではなく実際のアプリケーションに適しています。 :)