ここにあるドキュメントは古いものです。 より新しいものが perldoc.jpにあります → perlfaq1 - Perl に関する一般的な質問 ($Revision: 1.3 $, $Date: 2006/04/08 18:01:46 $)


NAME

perlfaq1 - General Questions About Perl ($Revision: 1.20 $, $Date: 1999/01/08 04:22:09 $)


DESCRIPTION

このセクションでは、Perlに関する非常に一般的な こうレベルの質問に答えます。


What is Perl?

Perlってなんですか?

Perl は Larry Wall と数多い協力者によって書かれた、折衷的な遺産を持った高水準 プログラミング言語です。 それは遍在す るプログラミング言語であるCから派生し、そしてそれ程ではないけれども、 sed、awk、Unixのシェルおよび少なくともダース単位の他のツールや言 語に影響を受けています。Perlのプロセス、ファイル及びテキスト操作 機能は、クィックプロトタイピング、システムユーティリティ、ソフト ウェアツール、システム管理タスク、データベースアクセス、グラフィ カルプログラミング、ネットワーキング、そしてworld wide webプログ ラミングを含んだタスクに特に適したものになっています。これらの強 みは、システム管理者やCGI スクリプトの作者に特に人気を博すもとと なっていますが、数学者、遺伝学者、ジャーナリスト、そして管理者も またPerlを利用しているのです。たぶんあなたもそうなるでしょう。


Who supports Perl? Who develops it? Why is it free?

だれがPerlをサポートしているのですか? 誰が開発しているのですか? なぜ無料(free)なのでしょうか?

pre-populistなインターネットの独特の文化と、Perlの作者であるLarry Wallの強い信条が、perlのフリー(訳注:英語のfreeには「自由」と「無 料」の意味があることに注意)でオープンな配布政策を生じさせました。 Perlはその利用者によってサポートされています。コア、Perlの標準ラ イブラリ、オプションモジュール、そしてあなたが今読んでいる資料は 全てボランティアの手で書かれました。詳細はperlソース配布セットの READMEファイルの最後にあるパーソナルノートを参照して下さい。 Perlのマイルストーンリリースについてはperlhist(5.005で追加) を参照してください

特に、(Perl移植者として知られる)コア開発チームは、お金を出してで も購入したいと思うレベルのものよりも、さらに良いソフトウェアを無 料で作り出すのだと誓っている、非常に利他的な人達のrag-tag bandで す。 nntp://news.perl.com/perl.porters-gw/http://www.dejanews.com/ を通して延び延びとなっている開発についてかぎまわることもできます。 あるいは、perl5-porters-request@perl.orgへ登録願いを出すことに よってメイリングリストに参加することもできます。

GNU プロジェクトはその配布セットにPerlを含んでいますが、``GNU Perl'' のようなものはありません。PerlはFree Software Foundationによる作 成も保守もされてはいません。Perlのライセンス条件はGNU ソフトウェ アが通常取っているよりもさらにオープンなものとなっています。

あなたが望むなら、Perlの商用サポートを受けることが出来ます。けれ ども、大半の利用者にとっては、非公式のサポートは期待水準以上のも のでしょう。詳しくは ``Where can I buy a commercial version of perl?'' (どこで商用版Perlを買うことが出来ますか?) の回答を参照してくださ い。


Which version of Perl should I use?

どのバージョンのPerlを使うべきなのでしょうか?


What are perl4 and perl5?

perl4とperl5ってなんですか?

perl4 と perl5 は、perlプログラミング言語の異なったバージョンの 非公式な名称です。``Perlの5(.004)リリース''というより、``perl5''と言 う方が簡単です。しかし、ある人々は、大文字ではない``perl5''と呼ば れる言語があることを意味するのだと解釈しました。perl5 は単に五番 目のメジャーリリース(1994年10月)の普及した名称ですが、一方perl4 は四番目のメジャーリリース(1991年3月)でした。同様に、perl1(1988年1月)、 perl2(1988年6月) そしてperl3(1989年10月)もありました。

5.0のリリースは本質的に、リリース1からリリース4までの perlソースコードの完全な書き 換えです。それは、旧コードには似ても似つかなくなるまで、モジュー ル化され、オブジェクト指向となり、微調整され、整備され、最適化さ れました。しかしながら、インターフェースはほとんど同じであり、以 前のバージョンとの互換性は非常に高いです。 perltrapを参照してください。

「perl5はどんな言語ですか?」という混乱を避けるため、ある人々は perlの最新バージョンに言及するのに単に``perl''を使うのを好み、全体 に``perl5''を使うのを避けています。ほんとうはたいした事ではないの ですが。

Perlの改訂の歴史に関してはperlhistを参照してください。


What is perl6?

perl6ってなんですか?

Perl6はTopazプロジェクトに対して半ば冗談でつけられている名前です。 Chip Salzenbergが指揮をとっているTopazプロジェクトはカレントリリースの Perlの書換を行う更にまた別のプロジェクトで、リリース5のものよりも より保守のしやすいコアを作ることが主たる目的です。移植性あるC++に よって記述し、より速く小さくすることよりも以前のリリースのPerlと100%の ソース互換性を持たせることを目指しています。Topazチームはほとんどの XSモジュールを変更しないで済み、新しいインターフェースを導入した ことによる効率を抜きにしても XS互換のインターフェースを供給することを希望しています。 Topazにおける新たな機能はまだ決定していませんが、互換性を重視し パフォーマンスも考慮するものになるでしょう。

There is no ETA for Topaz. It is expected to be several years before it achieves enough robustness, compatibility, portability, and performance to replace perl5 for ordinary use by mere mortals. =cut

もしあなたがバリバリのC++ウィザードでPerlの内部コマンドに親しんで いるのであれば、このプロジェクトに参加しようと考えるかもしれません。 Topazのメイリングリストに登録するには、perl6-porters-request@perl.org にリクエストを出します。

Topazプロジェクトの完了時期は明確になっていません。 perl5を置き換えるだけの充分な堅牢性、 互換性、移植性、パフォーマンスを備えるようになるまでに何年かかかるだろう と見込まれています。


How stable is Perl?

Perlはどのくらい安定しているのでしょうか?

バグのフィックスと新機能を組み入れた本番リリースは、リリース前に 広くテストされます。平均すると、5.000のリリースからはだいたい一 年に一回の割でproduction releaseをしてきました。

LarryとPerl開発チームは時折言語内部のコアに対する変更を行います が、可能な限り旧版との互換性維持に努めています。全てのperl4 スク リプトが perl5の下で無傷で走るわけではありませんが、perlのアップ デートによって、以前のバージョンのperl向けに書かれたプログラムを 無効になってしまうことはほとんどありえないでしょう。(偶発的なバ グフィックスの排除とまれに新しいキーワード)


Is Perl difficult to learn?

Perlは学ぶのが難しいのでしょうか?

いいえ。Perlは学び始めるのが容易で -- しかも学び続けるのが容易なのです。 Perlはあなたが(たぶん)慣れ親しんできたたいていのプログラミング 言語のように見えます。ですから、C プログラムを、awk スクリプトを、 シェルスクリプトを、はたまたBASICのプログラムであろうと書い たことがあるのなら、既に習得の途上にあるわけです。

たいていのタスクはPerl言語の小さなサブセットを要求するだけです。 Perlの開発における指導的モットーのひとつは、「それを行うやり方は 一つではない」(``there's more than one way to do it)というもので す(TMTOWTDI、時々''tim toady``と発音される)。それ故、Perlの習得曲 線は浅く(学びやすく)長い(もしほんとうに望むのならできることは 山ほどある)のです。

最後に、Perlはしばしば(しかし常に、ではありません。定義によります) 言われるようにインタープリター型言 語です。つまり、プログラムを書いたら、中間コンパイルステップに入 らずそのままテストでき、実験や、テスト/デバッグをすばやく、かつ 容易に行なえるようにしてくれるわけです。この実験の容易さが、より いっそう習得曲線を平らにします

Perlをより学びやすくするもの:UNIXの経験、ほとんどあらゆる種類の プログラミング経験、正規表現の理解、そして他の人のコードを理解す る力。あなたが何か行う必要がある場合、たぶんそれは行われており、 通常その仕事の事例は無料で利用することができます。新しいperlモジ ュールも忘れてはなりません。それらは二章で議論されているCPANと共 に、このFAQの三章で議論されています。


How does Perl compare with other languages like Java, Python, REXX, Scheme, or Tcl?

Java, Python, REXX, Scheme, Tclといった他の言語と比べて Perlはどうなんでしょうか。

いくつかの領域では優っていて、不利な部分もあるというところでしょ う。正確には、どの領域で有利でどの領域が不利かということは、個々 人の好みの問題です。ですから、この質問をUsenetで尋ねるのは非生産 的な聖戦を始めるという大きなリスクを伴います。

たぶん最も良い方法は、等価な仕事をするひとそろいのコードを書いて みることです。これらの言語とも、それらについて(願わくば言い争う ためでなく)習うためのニュースグループを持っています。

どうしても、というのならhttp://language.perl.com/versus/に 比較を行ったドキュメントが幾つかあります。


Can I do [task] in Perl?

Perlでタスク(task)を行えますか?

Perlは、オンラインのファイル処理タスクから複雑なシステムまでほと んど全てのタスクで使うのに十分な柔軟性があり、高い拡張性を持って います。多くの人々にとっては、Perlはシェルスクリプティングに対す る偉大な代用品として仕えます。他の人々にとっては、C やC++ のよう な低水準言語でプログラムしてきた大半のものに対する、便利で高水準 な代用品として仕えます。最終的にはPerlをどのタスクに使ってどれに 使わないかはあなた(そしてたぶんあなたの管理)によります。

APIを提供するライブラリがあれば、そこにあるコンポーネントをみん な、ちょうどもうひとつのPerl関数として、あるいはC やC++ で書かれ、 主要なperlインタープリタにダイナミックリンクされたPerlエクステン ションを使った変数として、利用することができます。また、他の方向 に行って、強力なアプリケーションを制作するために、主要なプログラ ムをC やC++ で書いて、それをそのままちょっとしたPerlコードにリン クさせることも可能です。perlembedを参照してください。

ある種の問題に対しては単により便利で、特定の問題領域専用の、小型 で、集約された、特別な目的を持った言語は常にあるものだと言われて います。Perlはあらゆる人に対してあらゆるものであろうとしています が、誰かに対する何か特別なものではありません。特化した言語の例と してはprolog と matlabが思い浮かんできます。


When shouldn't I program in Perl?

あなたのマネージャがそれを禁じた時です -- しかし、マネージャー達 を交代させることを熟考して下さい :-)。

実際には、他の言語で記述されていてすでに使われているような(さら にそれがうまく動いている)アプリケーションがあるとか、ある特定の タスクのために特別にデザインされたアプリケーション言語(prologや makeなど)があるというのが理由になるでしょう。

様々な理由により、Perlはリアルタイム組込みシステムとかデバイスド ライバやコンテキスト切り替えなどの低レベルなオペレーティングシス テムの開発作業、複雑なマルチスレッド、共有メモリを使ったアプリケ ーション、非常に大きなアプリケーションなどには向いていません。あ なたはperlがPerlそれ自身で記述されてないということに気がつくかも 知れません。

Perl用の新たなネイティブコードコンパイラーは上に挙げた幾つかの弱 点を改善してくれるかもしれません。けれども、それでもPerlは基本的 には動的に型付け(dynamically typed)される言語であって、静的に型 付け(statically typed)される言語ではないということを理解してくだ さい。原子力発電所で使うプログラムや脳外科手術モニタリングプログ ラムを信用していないのであれば、懲らしめられることはありません。 そして、Larryもまた簡単に眠ってしまいます -- ウォール街は抵抗す るようプログラムされてはいません :-)


What's the difference between "perl" and "Perl"?

“perl”と“Perl”の違いはなんですか?

一ビット。ああ、ASCIIのことを話してるんじゃないの? :-) Larryは現 在“Perl”をその言語の特性を表わすために使い、“perl”を言語の実 装、たとえばインタープリターとして使っています。Tomの「お言葉」 では“違いはないがperlはPerlを解析できる”となります。たとえば、 “awkとperl”とか“PythonとPerl”といった比較は良いように見えま すが、“awkとPerl”とか“Pythonとperl”はそうではありません。 ただし、“PERL”と書いてはいけません。なぜなら、perlは何かの 頭字語ではないからです。実際のところは後づけのものがあるのですが。


Is it a Perl program or a Perl script?

Perlプログラム、それともPerlスクリプト?

Larryは気にしてはいません。冗談交じりに彼がいうには、 “スクリプト(台本)はあなたを俳優にするもの。プログラムはあなたを 観衆にするもの”ということです。

元々は、スクリプトは通常の対話コマンドの羅列でした。それはちょうど チャットスクリプトのようなもので、。uucpとかpppのチャットスクリプト あるいは.cshrcやF<.ircrc>のようなプログラムのスタートアップ スクリプトがそうです。チャットスクリプトは既にあるプログラムを 取り扱うためのドライバであり、独立したプログラムではありません。

コンピュータ科学者は全てのプログラムが解釈されることを正しく説明しようと するでしょう。 しかしもしあなたがコンピュータ科学者ではない人にこの質問をしたならば、 彼らはプログラムは物理的なマシンコードに一度コンパイルされて 何度もそれを実行することができるのに対して、スクリプトは 使われる度毎に変換されるという回答をするかもしれません。

Perlプログラムは、通常は厳密な意味においてコンパイル されるということはなく、さらに厳密な意味においてインタープリット されることもありません。Perlプログラムはバイトコード形式(Perlの 仮想機械に対するもの)へ翻訳することができますし、あるいはCだとか アセンブラのような完全に別な言語へ翻訳することもできます。あなた はソースコードが純粋なインタープリターのためにデザインされたのか、 parse-treeインタープリターのためにデザインされたのか、バイトコー ドインタープリターのためにデザインされたのか、あるいはネイティブ コードコンパイラーのためにデザインされたのかという区別をその外見 から判断することはできません。ですから、ここでこの質問に完璧に答 えるのは難しいのです。


What is a JAPH?

JAPHってなんですか?

何人かの人が自分の投稿に“just another perl hacker”というシグネ チャーをつかっていました。なかでもRandal Schwartzのものが有名です。 初期のものから百個ばかりが http://www.perl.com/CPAN/misc/japh から入手できます。


Where can I get a list of Larry Wall witticisms?

Larry Wallの「お言葉」(witticisms)はどこで手に入れられますか?

投稿されたものとか、ソースコードにあった百個以上のLarryの「お言葉」が http://www.perl.com/CPAN/misc/lwall-quotes.txt.gz で見つけられます。

新しい例は

    http://x1.dejanews.com/dnquery.xp?QRY=*&DBS=2&ST=PS&defaultOp=AND&LNG=ALL&format=terse&showsort=date&maxhits=100&subjects=&groups=&authors=larry@*wall.org&fromdate=&todate=

で見つけられます。


How can I convince my sysadmin/supervisor/employees to use version (5/5.005/Perl instead of some other language)?

私に関係するシステム管理者や、雇っている人々に、どうすれば 他の言語ではなくPerl(バージョン5.004)を使うように説得できるでしょうか?

あなたのマネージャであるとかあなたが雇っている人々が、サポートさ れていないソフトウェアやあなたの使っているオペレーティングシステ ム用に公式に出荷されていないソフトウェアに対して用心しているとい うのであれば、彼ら自身の興味に訴えかけることを試せるかもしれませ ん。Perlの構成であるとか、機能性、単純さ、威力を使ったり活用する ことによってプログラマーがより生産的になるのであれば、典型的な管 理者(や雇っている人)などを説得できるでしょう。Perlの使用に関して は、同様に(Perlの使用によって)開発時間が他の言語と比べたときに短 縮されることが助けになることがあるかもしれません。

もしあなたが特に変換とかテストにおいてボトルネックを抱えたプロジ ェクトを持っているのであれば、Perlはほぼ確実に明確、かつ迅速な解 決策を提供するでしょう。なんらかの説得の努力と組み合わせて、あな たはPerlは非常に幅広く使われていて、世界中至る所のコンピューター ソフトウェアやハードウェアの企業において非常に高い信頼と価値ある 結果があることを説明することに失敗すべきでないでしょう。現に、多 くのUNIXベンダーは現在デフォルトでPerlをshipしています。そしてサ ポートとは、あなたがこのFAQを含めて*総合的な*ドキュメン トに回答を見つけることができなければ、通常は単にnetnewsに投稿する ことです。

詳しい情報は http://www.perl.org/advocacy/ を参照してください。

もしあなたが、古いバージョンのperlからのアップグレードに対する不 平・不満に直面しているのであれば、(perlの)バージョン4はまったく 保守されていないことや、Perl開発チームによるサポートもされていな いということを指摘しましょう。もう一つのPerl5の大きなウリは、な んらかの仕事をするための開発時間を大きく削減するようなモジュール やエクステンションが数多くあるということでしょう。同様に、Perlの バージョン4と5との間の違いはawkとC++との間にある違い(うん、まあ そんなには違ってないんだろうけどでも趣旨はわかるでしょ?)くらい大 きいということに言及しましょう。もしあなたが将来に渡り開発し続け ているものに対してのサポートや現実的な利益というものを欲している のであれば、サポートされているバージョンを使うべきでしょう。これ は多分リリース5.005のことを意味しますが、5.004でもそう悪くはあり ません(これはたった一年前のものですし、一つ前のリリースですから)。 重大なバグの幾つかはバージョン5.000から5.003の間で修正されていま す。

注意すべきことがらとして、5.004に至るまでバッファーオーバーフロー の可能性がありました。 Perl4も含めてこれ以前の全てのリリースは安全性に問題があり、 みましょう。速やかにバージョンアップすべきです。


AUTHOR AND COPYRIGHT

Copyright (c) 1997-1999 Tom Christiansen and Nathan Torkington. All rights reserved.

When included as an integrated part of the Standard Distribution of Perl or of its documentation (printed or otherwise), this work is covered under Perl's Artistic Licence. For separate distributions of all or part of this FAQ outside of that, see perlfaq.

Irrespective of its distribution, all code examples here are public domain. You are permitted and encouraged to use this code and any derivatives thereof in your own programs for fun or for profit as you see fit. A simple comment in the code giving credit to the FAQ would be courteous but is not required.