Perl
出典: フリー百科事典『ウィキペディア(Wikipedia)』
パラダイム: | マルチパラダイム |
---|---|
登場時期: | 1987年 |
最新リリース: | 5.8.8 / 2006年1月31日 |
型付け: | 動的型付け |
影響を受けた言語: | AWK, BASIC-PLUS, C, C++, Lisp, Pascal, sed, Unix shell |
影響を与えた言語: | Python, PHP, Ruby |
プラットフォーム: | Cross-platform |
ライセンス: | GNU General Public License, Artistic License |
ウェブサイト: | http://www.perl.org/ |
プログラミング言語(一覧) |
オブジェクト指向言語 |
C++ - C# - D - Delphi - Eiffel Groovy - Java - Oberon Objective-C - Python - Ruby S - Self - Simula - Smalltalk Visual Basic .NET - WinDev |
命令型言語 |
ALGOL - APL - ASP AWK - アセンブリ言語 - BASIC C - COBOL - ECMAScript Forth - FORTRAN - Limbo Logo - Modula-2 - Pascal Perl - PHP - PL/I PostScript - RPG - Tcl/Tk |
関数型言語 |
Dylan - Haskell - ML/OCaml LISP/Common Lisp Mathematica - Scheme XSLT ー XQuery |
宣言型言語 |
CLIPS - Prolog - SQL |
並行プログラミング言語 |
Ada 95 - Erlang |
マークアップ言語 |
HTML - SGML - XML S式 |
関連項目 |
ソフトウェア設計 - プログラミング ソフトウェアテスト - 最適化 |
Perl(パール)はラリー・ウォールによって作られたインタプリタ方式のプログラミング言語およびその処理系である。Perl言語は、記述の美しさよりも実用性をモットーにしており、Cや sed、AWK、シェルスクリプトなど他のプログラミング言語のすぐれた機能を取り入れている。CGIやシステム管理、テキスト処理などのプログラムを書くのに広く用いられている。代表的なアプリケーションはMovable Typeなど。
言語処理系としてのperlはフリーソフトウェアであり、アーティスティック・ライセンスおよびGPLのもとで配布されており、誰でもどちらかのライセンスを選択して利用することができる。UNIXやWindowsなどの多種のプラットフォームの上で動作する。
目次 |
[編集] 特徴
- 強力な文字列演算機能 - 拡張された正規表現構文をサポートしている。
- 組み込みの連想配列 (ハッシュ)
- 許容度の高い文法 - 「TMTOWTDI ... There's More Than One Way To Do It(やり方はいくらでもある)」という言葉にあらわされるように、様々なスタイルで記述することができる。
- 柔軟な拡張性 - CPAN参照。
- リファレンス - C言語のポインタのようなもので、ポインタより安全に複雑なデータを扱える。
- オブジェクト指向 リファレンスをベースにした汎用オブジェクト指向システム。
- リファレンスカウントによるリソースマネージメント。
- クロージャのサポート。
- スレッド - Perlのスレッドはデータが丸ごとコピーされるという点で概念的にUNIXやLinuxのforkに近い。
- PerlIOレイヤ - 入出力操作に手を加えることが出来る。各レイヤはC言語で実装できるため高速である。
- Encodeモジュール - 汎用エンコーディング操作モジュール。
[編集] 実装
Perl 5現在において、Perlとは言語の名前であると同時に唯一の実装の名前でもある。この実装はC言語によって書かれており、非常に安定している。
実行はランタイムコンパイル形式を取っている。スクリプトは実行前に仮想マシン向けにコンパイルされ、コンパイルされたバイトコードが実行される。Perlをインタプリタと呼ぶ人がいるが、この点では厳密には異なる。昨今のスクリプト言語ではこの形式が採用されることが多い。
ただし、Pythonのように一旦生成したバイトコードを保存して再利用することは少ない。これは現在のPerlのランタイムコンパイルが高速で、バイトコードから実行するメリットが少ないことが理由の一つである。コンパイル済みコードの再利用ではむしろmod_perl のような形式が好まれている。
開発中のPerl 6はParrotという仮想マシンによって動作する。現在、ParrotCodeへのコンパイルを行うHaskell言語で書かれたPugsという実装が開発されている。Perl 6により、長らく実装が一つしかないという状況がようやく変わろうとしている。
[編集] 文法
[編集] Hello World
#!/usr/bin/perl use strict; use warnings; print "Hello, world!\n";
シェルからは以下のとおり。
perl -e 'print "Hello, world!\n"'
または
perl -le 'print "Hello, world!"'
[編集] コメント
「#」以降は行末までがコメントである。
[編集] データ型
主なものとして、スカラー(Scalar)、配列(Array)、そしてハッシュ(Hash)がある。
my $str = "Hello, world"; my @array = (0, 1, 2); my %hash = ('one' => 1, 'two' => 2);
なお、$@%といった変数の型を示す記号をシジル(sigil)と呼ぶ
うち、配列およびハッシュの各要素はスカラーであり、以下のようにアクセスする。
$array[1]; # 1; $hash{'two'} # 2;
スカラーには数値、文字列、バイト列、そして#リファレンス(参照;Reference)を格納できる。
my $int = 42; my $float = 3.14159265358979; my $string = "\x{99f1}\x{99dd}"; # UTF-8で「駱駝」 my $bytes = "\xe9\a7\b1\e9\a7\9d"; # バイト列で「駱駝」 my $sref = \$int; # スカラーへのリファレンス my $aref = \@array; # 配列へのリファレンス my $href = \%hash; # ハッシュへのリファレンス
[編集] リファレンス
参照元にアクセス、すなわちデリファレンス(dereference)するには、シジルを変数名の頭につければよい。
my $s = $$sref; my @a = @$aref; my %h = %$href;
ただし、配列およびハッシュへの参照に関しては、その要素にアクセスするのに->を使うことができる。
$aref->[1]; $href->{'two'};
参照元のデータタイプを調べるには、refを使う。
ref 1; # ref $sref; # 'SCALAR' ref $aref; # 'ARRAY' ref $href; # 'HASH'
参照元がオブジェクトの場合、ref そのオブジェクトが所属するパッケージ名を返す。
ref A::B->new(); # たいてい 'A::B'
[編集] 制御構文
C言語に似たif,for,whileが使えるのに加えて、これらを後置することもできる。
if ($cond) { } elsif($cond2){ } else { } doit if ($cond); while($cond){ }; doit while($cond); for(my $i = 0; $i < $count; $i++){ } foreach(0..$count){ } # こちらの方がよく使われる。for(0..$count)でもOK print for (@ARGV);
また、ifに対してunless、whileに対してuntilを持つ。
doit unless ($done); # doit if (! $done); doit until ($done); # doit while (! $done);
[編集] サブルーチン
サブルーチンは、以下のように定義する。
sub hello{ print "Hello, world!\n"; }
呼び出しは、以下のとおり。
hello(); &hello(); hello;
サブルーチンは、関数としても機能する。その場合、最後に評価した値ないしreturnで指定された値が返り値(配列)となる。
sub hello{ return "Hello, world\n"; # return は省略可能 } print hello();
引数は、特殊変数@_に格納される。
# 丁寧に書いた例 sub mul{ my ($op1, $op2) = @_; return $op1 * $op2; } sub mul{ $_[0] * $_[1] }; # こうも書ける
サブルーチンもリファレンスできる。
my $subref = \&mul; warn $subref->(7,6); # 42
これを使って無名サブルーチンを作ることも出来る。
my $subref = sub{ $_[0], $_[1] }; print $subref->(1, 2); print &$subref(1, 2); # こうも書ける
[編集] パッケージ
パッケージ(package)とは、perlにおける名前空間(namespace)のことである。
package Foo; our $bar = 'baz';
package main; our $bar = 'quux'; warn $bar; # 'quux'; warn $Foo::bar; # 'baz';
[編集] オブジェクト
Perlでは、上記のリファレンスとパッケージを組み合わせることにより、クラスベースのオブジェクト指向を実現している。
package Klass; sub new{ # コンストラクター my $pkg = shift; return bless { @_ }, $pkg; } sub meth{ # アクセサー my $self = shift; $self->{meth} = shift if @_; $self->{meth}; }
使う時は、以下のようにする。
my $obj = Klass->new( meth => 'od' ); warn $obj->meth; # 'od';
なぜこれが動くのかというと実は、Perlはこれを以下のように解釈している。
my $obj = Klass::new('Klass', meth => 'od' ); warn Klass::meth($obj);
Perlにおいて、クラスはただのパッケージであり、オブジェクトはただのblessされたリファレンスであり、そしてメソッドは第一引数にオブジェクトをとるただのサブルーチンである。
これはPerl 4との互換性を考慮してこのような「後付け」の設計となったのだが、驚くべき柔軟性を示す。これだけで継承も委譲も出来てしまうのだ。最初からオブジェクト指向のもとに設計された言語から見ると見た目は変であるが、それらの言語にまさるとも劣らないオブジェクト機能をPerlは持っている。
[編集] CPAN
Perlプログラムには、モジュールによって機能を付加することができる。たとえば、他のプログラムやネットワークとの通信、各種ファイル形式の取り扱い、数学的な計算など、数多くのモジュールが存在する。CPANは、こういったモジュールを体系的に管理する組織であり、インターネット上のサービスである。Perlプログラムが動作しているコンピュータがインターネットに接続してあれば、半自動的にCPANにアクセスしてモジュールを取得してインストールを行うことが可能である。
[編集] 代表的なCPANモジュール
- LWP - WWWクライアント/サーバー
- DBI - 汎用データベースインターフェイス
- XML::LibXML - XMLパーサー
[編集] 名称
「Perl」は当初、新約聖書の「マタイによる福音書」13章46節の「高価な真珠」にちなんで真珠を意味する「pearl」と名付けられた。ラリー・ウォールは肯定的な意味を持つ短い名前を選びたいと考えていて、彼によれば、3文字および4文字の単語を辞書から探して全て読んでみたが見あたらなかったということである。また、彼は妻のグロリアにちなんで名前を付けることも考えた。
Perl言語の正式なリリースの前に、すでに「pearl」という名前のプログラミング言語が存在することに気づき、綴りを変更して「Perl」とした。このように、「Perl」は略語ではなく、元々意味は無いが、あとからいくつかの意味が考えられている。正式なマニュアルでは、Practical Extraction and Report Language(実用的なデータ取得レポート作成言語)の意味であるとしている。Pathologically Eclectic Rubbish Lister(病的折衷主義のガラクタ出力装置)という少し皮肉な意味も考えられている。「Perl」という名称の記述においては、若干の注意が必要である。Perl言語を示すときは「Perl」というように、頭文字を大文字にして固有名詞であることをはっきりさせる。Perl言語の、現在配布されている唯一の言語処理系は「perl」という名前である。一般に「perlだけがPerl言語を解釈することができる」という表現がなされる。「PERL」のように全てを大文字にするのは誤りである。
[編集] 参考文献
- ラリー・ウォール、ジョン・オーワント、トム・クリスチャンセン著、近藤嘉雪訳『プログラミング Perl』VOLUME 1 (ISBN 4-87311-096-3), 2 (ISBN 4-87311-097-1), オライリージャパン、2002
[編集] 関連項目
- CPAN
- jcode.pl - 歌代和正氏が開発した日本語相互変換用のPerlライブラリ
- ActivePerl - ActiveState社のPerl互換実装。Win32版はよくWindows環境で最も利用される。
- PerlScript - ActivePerlをインストールすると使用できるようになるActiveX経由のPerl互換スクリプト言語。
- Santy - Perlで作られたワーム
- WideStudio
- アーティスティック・ライセンス
- ガベージコレクション
- グルー言語
- スクリプト言語
- デュアルライセンス
- ラリー・ウォール - Perlの開発者
- 正規表現
- 連想配列
- 軽量プログラミング言語(Lightweight Language)