Perlとは、ラリー・ウォールによって開発されたプログラミング言語である。宝石の名前「Pearl」とは綴りが異なるが、「Ruby」と宝石の名前を付けられた言語もある。

Perlのメリットとしてはテキスト処理が早い、インストールが簡単で、後方互換性の維持ができやすい、コンパイル作業を必要とせず実行できるなどといくつもある。

特に、日常的な業務を自動化したいと考えている方や、動的言語を覚えたい方、PHPを覚えてWebプログラミングの知識もできたので、汎用的な言語も覚えたい、bashやcshなどのシェルで文字列処理を行うのが大変だと感じている方にお勧めのPerlについて初心者にもわかりやすいようにご説明します。

特徴

モジュール

Perlプログラムには、モジュールによって機能を付加することができる。たとえば、他のプログラムやネットワークとの通信、各種ファイル形式の取り扱い、数学的な計算など、数多くのモジュールが存在する。PerlにはCPANというモジュールを体系的に管理するインターネット上のシステムがある。インターネットに接続しているならば、CPANにアクセスして、モジュールをインストールすることが可能である。

詳細は「CPAN」を参照

標準モジュール

Perlには標準で利用できるモジュールが数多く存在する。

代表的なCPANモジュール

テキスト処理
  • Text::CSV - CSVファイルの解析
  • Text::Diff - diffコマンド
  • Template Toolkit - テンプレートシステム
データベース
  • DBI - 汎用データベースインタフェース
Webアプリケーション
  • CGI - CGIプログラミング
  • Plack - PSGIのリファレンス実装
  • Mojolicious - Webフレームワーク
  • Catalyst - Webアプリケーションフレームワーク
Webアクセス
  • LWP::UserAgent - WWWクライアント
データ記述言語の処理
  • XML::Simple - XMLをPerlのデータ構造に変換
  • XML::LibXML - XMLのサポート
  • JSON - JSONのサポート
  • YAML - YAMLのサポート

PSGI/Plack

Perlスクリプトは実行ファイル形式またはモジュール形式を用いてウェブアプリケーションとして実行することができる。実行ファイル形式はCGI、FastCGI、SpeedyCGI、モジュール形式はmod_perl、ISAPIなどがある。このうちCGIが主な実行方法として知られているが、実行のたびにプロセスの読込・破棄を行っているため、オーバーヘッドが大きい。そのため、多くのアクセスを処理しなければならないウェブアプリケーションでは、パフォーマンスが悪くなることがある。一方、FastCGI、SpeedyCGI、mod_perlなどの環境では、プロセスをメモリ上に永続的に置くことによりプロセスの読込・破棄の作業を省き、高速化を図っている。

上記の実行環境はそれぞれインターフェイスが異なるため、ウェブアプリケーションフレームワークごとに差異を吸収するコードが繰り返し再発明されていた。この問題を解決すべく、宮川達彦氏主導の元、WSGIやRackにインスパイアされたPSGIというウェブアプリケーション フレームワーク用の規格が打ち出された。また、同時にPSGIのリファレンス実装のPlackも発表された 。これにより、具体的な実行環境を意識することなくウェブアプリケーションを作成できるようになった。2010年現在では、ほとんどのPerl製ウェブアプリケーションフレームワークがPSGIに対応している。

具体的にどの実行環境を使用するかはオペレーティングシステムやウェブサーバによって異なるが、次のような利用方法がある。

UNIX系

Apache
  • CGI
  • FastCGI
  • SpeedyCGI
  • mod_perl
lighttpd
  • CGI
  • FastCGI

Windows

IIS
  • CGI
  • ISAPI
Apache
  • CGI
  • FastCGI
  • SpeedyCGI
  • mod_perl
  • ISAPI
AN HTTPD
  • CGI
  • ISAPI

モジュールとは

モジュール (Module)とは、工学などにおける設計上の概念で、システムを構成する要素となるもの。いくつかの部品的機能を集め、まとまりのある機能を持った部品のこと。モジュールに従っているものをモジュラー (modular)という。

入出力を絞り込み、標準化することで、システム開発を「モジュールの組合わせ」にすることが出来る。

ハードウエア

パソコンなどを作成する際、標準規格に合った部品であれば、どの会社のモノを使用しても機能を発現できる。

IBMが、1980年代にパソコンの仕様を公開し、規格にあったモジュールであれば内部はブラックボックスでもかまわないという開発体制をとった。これにより、世界中に無数の部品メーカーが誕生、モジュールの性能を競ったためパソコンの性能は飛躍的に高まった。反対に、系列会社の生産した部品による作り込みの開発体制をとった日本メーカーは競争力を喪失した。これ以降、パソコンメーカーは性能がよく安いモジュールを世界中から探し組み立てるというビジネスに特化。組み立て産業となったパソコン産業では、格安の賃金で大量生産できる新興企業が幅を利かせることになった。価格低下により、旧来のメーカーにとっては利幅の薄い仕事となり、とうとうパラダイム転換の主であるIBMは撤退することになった。

現在、「組み立て」の前段階のモジュール作成においてはCPUやメモリなどの分野で最新技術がブラックボックスとして詰め込まれている。このため利益を上げやすい。一方で、「組み立て」後のアフターケアも需要は厚く利益を上げやすい。このように中段階だけ利益率が低く、前段階と後段階が利益率が高い状態が「∪」のような曲線を描くためスマイルカーブと呼ばれている。

同じようなモジュールの組み立て産業に自動車産業があるが、自動車の場合は、容積や重量などが重要要素であり、2万点以上ある部品間の相互依存性(interdependency)が大きいため、部品間において綿密かつ独自のすり合わせが必須である。このため、組み立てといえども容易に参入できるものではなく、自動車組み立て業は高い利益を上げることができる。

ソフトウエア

プログラミングにおいて、一連の機能をひとまとまりになる複数の機能:モジュールに分割し、それぞれ別に開発する場合がある。こうすることで、全体として完成を早めることが出来る上、モジュール単位でテストしたりすることが可能になり、モジュールの入れ替えで機能を高めたり補修したりすることができるようになる。

プログラムのモジュールは、出来るだけ他のモジュールとの結合度を弱めて、独立性を高めることが望ましい。

モジュールは、(一般に凝集した)サブルーチンとデータ構造の集合体としてのソフトウェアの実体である。モジュールはその部分だけでコンパイル可能な単位でもあり、再利用可能であると同時に、複数のプログラマが同時並行的にそれぞれ異なるモジュールの開発を行うことが可能となる。モジュールの特徴として「モジュール性」とカプセル化があり、それらによって複雑なプログラムを理解しやすくできる。

モジュールはインタフェースと実装を分離する。モジュールのインターフェイスはそのモジュールが外部に提供すべき要素とそのモジュールが必要とする要素を表している。実装はそのインターフェイスで提供するよう定義された機能を実際に実現するコードを含む。モジュールの概念を明示的にサポートする言語として、Ada、D言語、F言語、FORTRAN、Pascal、ML、Modula-2、Python、Ruby などがある。

モジュール性

モジュール性(Modularity)はプログラムの属性であり、モジュールによって構成される範囲の程度を示すものである。プログラミングにおけるモジュラーアプローチは人工知能システム構築で一般化しつつある。大規模人工知能システムは特定の機能を持つモジュールを組み合わせて構成され、各モジュールが相互に通信することでシステム全体としての動作を決定する。

プログラム内の任意の2つの部分が相互に関連することが多い場合、そのようなコードはモジュール性が低い。一方モジュール間のインターフェイスがきちんと定義されていて、それ以外の相互の関連が存在しないプログラムコードは、モジュール性が高いと言える。

モジュラープログラミングはモジュール性を高める技法である。

モジュールとクラス

モジュールとクラスの違いは以下の通りである。

モジュールとクラスの類似点は以下の通りである。

Contents