ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
スクリプト言語のひとつ。インタープリターはCで記述されている。
'use strict;'プラグマを有効にしない限り、グローバル変数が宣言無しで利用できるが、my(ローカル変数)、local(レクシカル変数)、our(グローバル変数)などの種別をつけて宣言する方が望ましい。
変数の前にはその種類に応じて'$'(スカラー変数)、'@'(配列変数)、'%'(ハッシュ変数)のプレフィクス(ファニー文字という)がつき、予約語とバッティングしないようになっている。
いくつかの特殊変数があり、それらを通じて環境変数やPerlの機能などを参照、変更できる。
今日多くのプログラミング言語でパターンマッチは使えるが、Perlはその成り立ちからパターンマッチが言語組み込みで、UNIXで標準的なsedなどの書き方に似た特別な構文が用意されている。
正規表現の内容は、POSIXの拡張正規表現にPerl独自の拡張(最長/最短マッチの選択、再帰、コメント、複数行記述など)を施したようなもので、非常に強力である。
'package Package::Name;'のような宣言でパッケージ(名前空間)が宣言できる。
packageはブロックの宣言('package Package::Name{...}')ではなく文であり、この文以降のスクリプトファイル内に書かれた内容がその名前空間に属することとなる(5.14でブロックでの宣言も可能となった)。
package文が再び出てくれば、それ以降の内容は2番目に出てきたpackageの名前に属することとなる。
パッケージ名は'::'で区切られ、階層化することが可能である。
また、package文のない部分のスクリプトは自動的に'main'パッケージの内容であると見なされる。Perlにはmain関数がないが、現在では'main'パッケージに書かれた内容を逐次実行することになっている。
リファレンスとパッケージの仕組みを組み合わせることによってクラスベースのオブジェクト指向を実現している。
package Class; # Classパッケージ sub new{ # コンストラクタ my $package = shift; # 第一引数にパッケージ名(クラス名に相当) my $arg = shift; my $data = {true => $arg}; # インスタンス変数 return bless $data,$package; # オブジェクトを返す } sub prn{ # メソッド my $self = shift; # 第一引数にオブジェクト my $str = shift; print $str,$self->{true}; } package main; # main my $object = Class->new(42); # インスタンス化 $object->prn('awk'); # メソッド呼び出し # 出力:awk42
オブジェクトは'bless'関数で生成される、パッケージ名とデータを格納するリファレンス(インスタンス変数の働きをする)からなるデータである。
メソッドは単なるパッケージ関数で、メソッド呼び出し'->'は左辺のクラス名またはオブジェクトを右辺の関数の第一引数に設定し関数を呼び出す演算子で、コンストラクタはオブジェクトを返す単なるパッケージ関数(名前は任意)である。
継承はスーパークラスのパッケージ名を決められた変数へ記録するだけである。
この単純な仕組みでできているオブジェクト指向だが、クラスベースのオブジェクト指向として他の言語(C++など)と遜色ない機能を実現している。
ただし'private'などアクセスを司る制御がないゆえにアクセス規制は少々面倒である(クロージャなどを使い可能)。
設計者のLarry Wallが言語学者だったことなどから、Perlは通常のプログラミング言語より自然言語的な振る舞いをするようになっている。
コンテクスト(文脈)という仕組みにより、同じ変数でも状況により評価された値が変わることがある。
関数などの使用により、「単一の値(スカラ)/複数の値(リスト)」、「数値/文字列」を要求される文脈ができ、その状況に応じて適切な値を返す。
例えば配列をスカラコンテクスト(スカラを要求する文脈)で評価して、配列の内容ではなく要素数をかえすなどの用途が考えられる。
「標準的」な使い方に便利なように、一部の演算子(関数含む)に引数を与えない場合は暗黙の変数をとることになっている。
暗黙の変数は$_、@_、%_等の変数で、例えばshiftは@_の内容を操作し、printは$_の内容を表示するような動作をする。
ファイル行読み演算子<FILEHANDLE>が読み込んだ行の内容を$_にいれる動作などとも調和し、少ない文字数で処理がかけるようになっている。
これは、時にPerlスクリプトの可読性を損ねる一因ともされる。
自然言語のように略語や短い語によって記述量を減らそうとするむきもある。
複数の書き方ができること、デフォルトで変数に宣言がいらないこと、暗黙の変数などの略記に適した構文などが用意されていることなどから、Perlはコーディングの早さ、簡単さに関してアドバンテージを持つとされる。
これにより「ワンライナー」と呼ばれる1行プログラミングの発達やシェルスクリプト的なグルー言語としての地位を手に入れるに至った。
また制約が緩く、全容を知らずともそこそこのプログラムが書けるので、学習曲線が緩くなる効果もある(その代わり長いが)。
しかしその弊害か、「書き捨て」られるコードやスパゲッティプログラムの生まれやすい環境だと言われ、より整理されたとされるPHP、Rubyなどが新規のプログラミング人口にすすめられる要因にもなっている。
このように自由すぎるのも保守管理の弊害となるので、特に中規模以上のプログラムを作成する際は'use strict;'や'use warnings;'なるプラグマをつけてある程度の制限を課しつつプログラミングを行なうことが近年では推奨されている。
基本的に後方互換性は保つ方針で、Perl4のスクリプトであっても僅かな変更で現在最新のPerlで動くという。
また、多くのプラットフォームに移植されているが、一部のプラットフォーム依存のライブラリ(Win32::など)を使わない限り非常に高い互換性を持つようになっている。
Perl4のころまでは、日本語などの文字に対応していなかった。この当時はシフトJISが主流で、電子メールはISO-2022-JPが使われていた。文字をバイト列として処理していたため、C等と同じく日本語文字の処理には不便があった。
これを克服するために、jcode.plやJcode.pm、JPerlなどのツールが作られ、文字コードの変換が行なわれていた。文書ファイル(シフトJISやEUC-JP)と電子メール(ISO-2022-JP)の変換処理などで活躍した。
Perl5.6から段階的にUTF-8やPerlIOと呼ばれる多バイト文字列処理の仕組みが導入され、現在最新のPerlでは日本語などの多バイト文字を「内部文字列」として統一的に扱うことで、文字を自然に扱うことができる。
CPANというサイトでPerlのモジュールが数多く公開されていて、再利用という形でオブジェクト指向プログラミングの恩恵を受けることができる。
このサイトにはPerlユーザーが登録すれば誰でもモジュールが公開できるようになっている。この非常に多くの有用なモジュールが、古くから続くPerlの資産になっている。
現状最新のPerlのメジャーバージョンは5だが、後継としてPerl6なるものが開発中である。
これはPerl4→5のような互換性を保った変革ではなく、Perlの思想だけ残して抜本的に全てを書き換える計画だといい、Perl5との互換性はないとされる。
Perlは「実装が仕様」のような状態で長年やってきたが、Perl6は仕様を先に決めそれから実装することが決められている。
またPerlに限らない汎用な動的型付けインタプリタを目指すParrotという環境がPerl6に関連して開発中である。
このように5と6はフルスクラッチレベルで異なるので、Perl5とPerl6は名前が似ている別言語のような扱いとし、両者とも開発が続けられるというような方向性で動いているらしい。
日本においては、PerlはYet Another society(The Perl Foundationの別名)、和名「イェット アナザー ソサイエティー」が商標申請中だった。
ところが2009(平成21)年11月2日、株式会社テラ・インターナショナル(代表、北畠徹也)の名義で「Perl」を登録出願された商標が、2010(平成22)年3月1日に登録査定、そして2010(平成22)年4月9日に設定登録された。
このためコンピューター業界では大問題となり、SlashdotでもPerl、勝手に商標登録される。「OPENSOURCE」や「RUBY」「Apache」も申請中などのストーリーが立てられた。
この登録には異議が申し立てられた(異議2010-900199)。商標登録異議申立人は、神奈川県川崎市の柏木一浩(誰かは不明)と、商標出願中のアメリカの「イェット アナザー ソサイエティー」である。
最終的に、「登録第5314384号商標の商標登録を取り消す。」となった。理由として、次のように述べられている。
5 当審の判断
本件に関し、平成23年2月9日付けで、前記4の取消理由を通知し、期間を指定して意見書を提出する機会を与えたが、商標権者からは何らの応答もなかった。
本件商標についてした上記の取消理由は妥当であるから、その登録は商標法第4条第1項第15号に違反してされたものといわざるを得ない。
したがって、他の理由について判断するまでもなく、本件商標の登録は、同法第43条の3第2項の規定により、取り消すべきものとする。
よって、結論のとおり決定する
平成23年8月1日
審判長 特許庁審判官 鈴木修
特許庁審判官 内山進
特許庁審判官 前山るり子
コメントなどを投稿するフォームは、日本語対応時のみ表示されます