PythonとPerlの議論に深く潜る - 私はPythonかPerlのどちらを学ぶべきか?
新しいプログラミング言語が導入されると、業界の天才たちの間で比較が始まる議論がよく発生します。この言語は、すでに広がりつつある言語と比較されます。IT業界ではしばしば話題が広がり、新しい言語は特徴、構文、コアCPUおよびメモリの面(GC時間などを含む)で、既存の同種の言語と比較されることがよくあります。
こうしたケースの多くの例は、過去の中から挙げられ、調査されることができます。例えば、JavaとC#、C++などの議論が含まれます。その中でも特に注目を集めたのは、短期間で立て続けに登場した二つの言語、すなわちPythonとPerlの議論でした。
一方、Pythonは元々、ABC言語の後継として作られ、単なる趣味のプログラミングプロジェクトとして、著者が彼の最大のスターであるモンティ・パイソンのシリーズにちなんで名付けたものでした。
おすすめの読書: LinuxにおけるPythonプログラミングとスクリプティングの始め方
Perlは、レポート処理を簡単にすることを目的としたUnixスクリプト言語として、ちょうど2年前に登場しました。それはC、awk、sed、そしてシェルスクリプトなど、多くの言語の組み合わせの混合でした。
注目すべき点は、異なる意図から進化したこれらの言語が常に比較されていることであり、そのため私はそれを研究し、理由を探ることになりました。その中でいくつかの重要な理由を以下に示します:
- 両方ともハッカー向けのUnixオペレーティングシステムを対象としており、もう一方はレポートを処理するためのものです。
- どちらもオブジェクト指向であり(Pythonの方がよりそうで)、インタプリタ型です。一方は強い型付けがされており、コーディングの際には明確である(すなわちPython)、もう一方はブロックを表すためにブレースを用いた見苦しい型付けを許容しています(すなわちPerl)。
- 原則として両者は対極にあります。Perlは1つのタスクを実行するために多くの方法を提供しているのに対し、Pythonは1つのことを1つの方法だけで行うことに重点を置いています。
Python対Perl - 特徴の比較
この議論に深く入り込み、これら二つの言語がどのように異なるのか、全体的な側面をつかんでみましょう。また、「Pythonは補助輪付きのPerlである」や「PythonはPerlに似ているが異なる」という業界でよく聞かれる多くのクリシェの真実の源を見つける努力もしてみましょう。この終わりのない議論に対する正確な解決策を見いだすために。
1. Pythonのクリーンな構文対Perlの複雑な構文
Pythonは、コードの可読性に関してPerlに対して大きな利点があります。Pythonのコードは、何年も経ってからコードを読むときでさえ、Perlのコードよりもずっと理解しやすいです。
インデントでコードのブロックを表し、適切に構造化されているため、Pythonのコードははるかにクリーンです。一方、Perlは、正規表現に関しては、C、シェルスクリプト、さらにはawkやsedフィルターなど、さまざまなプログラミング言語からその構文を借用しています。
推奨リーディング: 日常のLinuxシステム管理タスクのための15の便利な‘sed’コマンド
これに加えて、‘{‘と‘}’がコードのブロックを表し、各行の最後に不要な‘;’が追加されるため、Perlのコードは、汚いスクリプトの許容のために、数ヶ月または数年後に読むと理解するのが難しくなる可能性があります。
2. Perlの組み込み機能とPythonのサードパーティの正規表現およびOS操作のサポート
Perl言語は、その構文をCやsed、awkなどの他のUNIXコマンドから借用しており、そのため、サードパーティのモジュールをインポートすることなく、非常に強力で組み込みの正規表現サポートを提供しています。
また、Perlは組み込み関数を使用してOS操作を処理することができます。一方、Pythonは、regexのためのreや、OS操作のためのos、sysのようなサードパーティライブラリを持っています。そのため、そのような操作を行う前に確認する必要があります。
Perlの正規表現操作は、検索操作だけでなく、文字列の置換、代入、その他の操作を簡単かつ迅速に行えるようにする「sed」のような構文を持っています。一方、Pythonでは必要な機能を満たすために、関数を知っておく必要があります。
例:文字列における数字を検索するプログラムを考えてみてください Perl言語とPython言語で。
Import re
str = ‘hello0909there’
result = re.findall(‘\d+’,str)
print result
$string = ‘hello0909there’;
$string =~ m/(\d+)/;
print “$& \n”
Perlの構文は非常に簡単で、sedコマンドに触発されており、Pythonの構文がサードパーティモジュール‘re’をインポートすることを考えると、その利点を生かしています。
3. Pythonの高度なオブジェクト指向プログラミングとPerlのワンライナー
PythonがPerlに勝る特徴の一つは、その高度なOOプログラミングです。Pythonは、クリーンで一貫した構文を持つ広範なオブジェクト指向プログラミングサポートを提供していますが、PerlのオブジェクトOOPは、パッケージがクラスの代わりとして使用されるため、時代遅れです。
おすすめの読書: Python Django Webフレームワークの始め方
また、PerlでOOコードを書くことは、コードに多くの複雑さを加えることになり、最終的にはコードを理解しづらくなります。Perlのサブルーチンさえも非常にプログラムが難しく、後で理解するのが難しくなります。
一方、Perlはコマンドラインでさまざまなタスクを実行するために使用できる一行コードが得意です。また、Perlコードは最終的にPythonよりも少ない行数でさまざまなタスクを実行することができます。
両言語のショートコードの例で、Perlがより少ない行数で多くのことを行う能力を強調しています。
try:
with open(“data.csv”) as f:
for line in f:
print line,
except Exception as e:
print "Can't open file - %s"%e
open(FILE,”%lt;inp.txt”) or die “Can’t open file”;
while(<FILE>) {
print “$_”; }
長所と短所 - Python 対 Perl
このセクションでは、PythonとPerlの長所と短所について議論します。
PythonのPROS:
- この言語は、クリーンでエレガントな構文を持っているため、プログラミング言語に手を出したい初学者にとって最初のプログラミング言語として非常に優れた選択肢となります。
- 非常に高度で固有の
OOプログラミングを持っており、またPythonのスレッドプログラミングはPerlよりもはるかに優れています。 - Pythonが好まれ、Perlを上回る多くのアプリケーション分野があります。例えば:CGIスクリプトにはPerlが好まれていますが、最近ではPythonのDjangoやweb2pyのようなウェブスクリプト言語が人気を博し、業界からの大きな関心を集めています。
- 様々なSWIGラッパーが、CPython、IronPython、Jythonなどの異なるプログラミング言語用に存在し、これらの開発はPerl用のSWIGラッパーの開発に先行して行われました。
- Pythonのコードは常に適切にインデントされており、他の人のコードや何年も経ってから自分のコードを読んでも、読みやすく理解しやすいです。
- Pythonはビッグデータ、インフラ自動化、機械学習、NLPなど、さまざまなアプリケーションに適しており、オープンソースであるため活発なコミュニティの大きなサポートがあります。
Python コンソール:
- Pythonの実行が通常Perlよりも遅い分野は、正規表現や文字列操作などいくつかあります。
- 時々、Pythonで変数の型を取得するのは難しいことがあります。特に大規模なコードの場合、最後まで行かなければ変数の型を取得できず、それが煩雑で複雑になります。
Perlの利点:
- Perlは強力なワンライナーを持ち、UNIXのパイプラインのような構文を確保しており、コマンドラインでさまざまなタスクを実行するために使用できます。また、Unixとそのコマンドラインプログラミングの影響を受けているため、コーディングに多くのUNIXに影響を受けたコマンドが統合されています。
- Perlはその強力な正規表現や文字列比較操作で知られており、sedやawkのような強力なUNIXツールに影響を受けています。置換、マッチング、置き換えのような正規表現や文字列操作において、Perlは同じことを実現するために数行のコードが必要なPythonを上回ります。また、多くのファイル入出力操作や例外処理もPerlの方が速く行えます。
- レポート生成のための言語に関して言えば、Perlはその導入以来常に有名であり、Perlのような言語を開発する主な理由の一つがレポート生成であった。
- Perlが使用される多くの応用分野は、ネットワークプログラミング、システム管理、CGIスクリプティング(ここではPythonがDjangoやweb2pyでPerlを上回っています)などです。
- Perlが変数の前に使用する記号によって、変数のタイプを特定するのは簡単です。例えば、
‘@’は配列を、‘%’はハッシュを示します。
Perlの規約:
- Perlは非常に複雑なコードを持っており、初心者には理解が難しいです。サブルーチンや、
‘$`’、‘$&’のような他の記号も、経験が少ないプログラマーにとっては理解しづらく、プログラムを書くのも難しいです。また、Perlのコードは、質の高い経験がないと読むのも理解するのも難しく、複雑です。 - OO プログラミングは Perl の中では少し時代遅れであり、OO プログラミングに関して知られているわけではなく、スレッドなどの多くの操作も Perl ではあまり目立ちません。
結論
上記のように、両言語がそれぞれ対象とするアプリケーションにおいて優れていることは明らかですが、Pythonはそのクリーンで理解しやすいコードのため、初心者にとっては第一選択としてPerlよりも若干の利点を持っています。一方で、Perlは文字列操作やUNIXのようなOS向けのいくつかの高度なワンライナーを使用する際にPythonを上回ります。
つまり、最終的にはあなたがターゲットにする特定の分野にすべてがかかっています。この文章へのすべてのコメントを歓迎しますし、あなたの考えをお聞かせいただければと思います。あなたが考えるに、Pythonが勝つのか、それともPerlなのかについてお聞かせください。