PERL(1) USER COMMANDS PERL(1) NAME perl - Practical Extraction and Report Language SYNOPSIS 参照しやすいように Perl のマニュアルは、いくつかの節に分割し ました。 perl Perl の概論 (本節) perldata Perl のデータ構造 perlsyn Perl の構文 perlop Perl の演算子と優先順位 perlre Perl の正規表現 perlrun Perl の実行とオプション perlfunc Perl の組み込み関数 perlvar Perl の定義済み変数 perlsub Perl のサブルーティン perlmod Perl のモジュール perlref Perl のリファレンスとデータ構造のネスト perlobj Perl のオブジェクト perlbot Perl のオブジェクト指向の仕組みと例 perldebug Perl のデバッグ perldiag Perl の診断メッセージ perlform Perl のフォーマット文 perlipc Perl のプロセス間通信 perlsec Perl のセキュリティ perltrap Perl の不注意によるわな perlstyle Perl のスタイルガイド perlapi Perl の応用プログラムインタフェース perlguts Perl の拡張を行なうための内部関数 perlcall Perl の C からの呼び出し法 perlovl Perl での多重定義 perlbook Perl の書籍の情報 (初めて、1通り読もうと考えているならば、ここに並べた順番で読 めば、おそらく前方参照を減らすようになっていると思います。) プログラムの実行時に何か変なことが起こって、どこを参照したら よいかわからない場合には、取り敢えず -w スイッチを試してみて ください。 これで、問題か所を特定できる場合も、多々あります。 DESCRIPTION Perl は、テキストファイルを読み取り、そこから情報を引き出し、 その情報を元に様々な報告を行なうように設計された、インタプリ タ言語です。 また、多くのシステムマネジメントの作業を行なう のに適した言語でもあります。 この言語は、綺麗さ (小規模、エ レガント、最少) ではなく、実用性 (使い易さ、効率、完全性) を 目指しています。 この言語は、(少なくとも作者の意見では) C, sed, sh の良い部分を組み合わせているので、これらの言語に馴染 みのある方には、それほど難しいものではないでしょう。 (言語 歴史学者はまた、csh, Pascal あるいは BASIC-PLUS の痕跡にも気 付くかもしれません。) 式の構文はかなりの部分で、C の式の構 文に対応したものとなっています。 多くの UNIX のユーティリテ Perl manpages Last change: Release 5.0 Patchlevel 00 1 PERL(1) USER COMMANDS PERL(1) ィとは違って、Perl はデータの大きさに恣意的な制限を設けませ ん。 つまり Prel では、メモリさえ十分にあれば、ファイルを丸 ごと 1 つの文字列に入れてしまうこともできます。 再帰の深さ にも制限がありません。 また、連想配列が使用するハッシュテー ブルは、パフォーマンスを損なわないように、必要に応じて、自動 的に大きくなります。 Perl では、大量のデータをすばやく走査 できるように、工夫を凝らしたパターンマッチの技術を使っていま す。 テキストの走査のために設計されてはいますが、Perl では、 バイナリデータを扱うこともできますし、(dbm が使えるところで は) dbm ファイルを連想配列のようにして扱うこともできるように なっています。 データフロートレース機構を使って、単純ミスに よるセキュリティホールを塞ぐようにしているため、多くの場合、 setuid Perl スクリプトは C のプログラムよりも安全です。 普 通は sed や awk や sh で書くような問題でも、少し荷が重すぎる ようなとき、多少でも実行速度を速くしなければならないときや、 C で書く程でもないときには、Perl が最適でしょう。 また、sed や awk のスクリプトを Perl のスクリプトに変換するトランスレ ータも用意されています。 ちょっと待ってください、まだあります... Perl version 5 は、ほとんど全て書き直しており、以下のような ことが追加されています: + 多くの利便性に関する拡張 より読みやすい Perl コードが書けるようになりました (た とえ正規表現の中でも)。 以前の暗号的な変数名は覚えやす い識別子で置き換えることができます。 エラーメッセージ の情報量が多くなり、オプションの警告によって、初心者が 犯すような過ちを見つけやすくなっています。 これは、あ まり強要してはいません。 何かおかしな動作を見つけたら、 -w スイッチを使ってみてください !!! 変な動作が見つから ない場合にも -w スイッチを使ってください。 + 単純化された文法 新しい yacc 文法は以前に比べて、半分の大きさになりまし た。 任意文法規則の多くが正規化されました。 予約語の 数は 2/3 ほどに切り詰めています。 それにもかかわらず、 ほとんどすべての古い Perl のスクリプトを変更なしに使う ことができます。 + 文面に従ったスコープ Perl の変数を、C の "auto" 変数のように、字句スコープで 宣言することができます。 これは効率的であるばかりでな く、「大規模プログラミング」におけるプライバシーの保護 にも役立ちます。 + 任意の多重データ構造 任意のスカラ変数 (配列の要素でもよい) が、他の変数やサ ブルーティンへのリファレンスを持つことができます。 名 前のない変数やサブルーティンを作ることが簡単にできます。 また、Perl がリファレンスの参照数を管理してくれます。 Perl manpages Last change: Release 5.0 Patchlevel 00 2 PERL(1) USER COMMANDS PERL(1) + モジュール性と再利用性 Perl ライブラリは、様々なパッケージで簡単に共有できるモ ジュールという形で定義されるようになりました。 パッケ ージは、モジュールが公開しているインタフェースのすべて、 あるいは一部をインポートすることを選択できます。 プラ グマ (コンパイラディレクティブのこと) は同じ機構によっ て定義され、使用されます。 + オブジェクト指向プログラミング パッケージはクラスとして機能します。 少しばかり新しい 文法を導入して、動的多重継承や仮想メソッドを、明快な方 法でサポートしています。 ファイルハンドルをオブジェク トとして扱うことができるようになりました。 + 組み込み容易性と拡張性 Perl は簡単に C や C++ のアプリケーションに組み込めるよ うになり、文書化されているインタフェースを使って、それ らのルーティンとの間で、相互に呼び出しを行なったりする ことができます。 プリプロセッサ XS は、C や C++ のルー ティンを Perl に張り付けるのを手伝ってくれます。 動的 なモジュールのロードがサポートされています。 + POSIX 親和性 主な新規モジュールとして POSIX モジュールがあり、適切な ところでオブジェクトクラスを介するようにして、利用可能 な POSIX のルーティンや定義をアクセスすることができます。 + パッケージコンストラクタとデストラクタ 新しい BEGIN と END ブロックは、パッケージがコンパイル されるときと、プログラムが終了した後に制御を受け取るた めに使われます。 縮退した形として、-p や -n スイッチを 用いたときには awk の BEGIN と END のように動作します。 + 複数の同時 DBM インプリメンテーション 一つのスクリプトから、Perl プログラムが DBM、NDBM、SDBM、 GDBM、バークレイ DB のファイルを、同時にアクセスできる ようになりました。 実際には、旧 dbmopen インタフェース は、任意の変数をアクセスメソッドを定義しているオブジェ クトクラスに tie する形式に一般化されました。 + サブルーティン定義の自動ロード 実際には、AUTOLOAD 機構では、未定義のサブルーティンコー ルのために、任意の内容を定義することができるようにして います。 自動ロードのためだけではありません。 + 正規表現の拡張 最長一致ではない数量子を指定することができます。 後方 参照とならないグループ化が可能になりました。 正規表現 の中に空白やコメントを書くことができ、読みやすさが向上 します。 すべての古い正規表現にアッパーコンパチな一貫 した拡張性機構が組み込まれました。 Perl manpages Last change: Release 5.0 Patchlevel 00 3 PERL(1) USER COMMANDS PERL(1) さあ、誇大広告にはこれくらいにしましょう。 ENVIRONMENT HOME chdir が引数なしで使われたときに参照されます。 LOGDIR chdir が引数なしで使われたときに、HOME が設定さ れていないと参照されます。 PATH サブプロセスを実行するときと、-S を使ったときに スクリプトを探すために参照されます。 PERL5LIB Perl のライブラリファイルを探すときに、標準のラ イブラリディレクトリとカレントディレクトリよりも 前に探しにいくディレクトリを、コンマで区切って並 べたリストです。 PERL5LIB が定義されていないと きには、PERLLIB が使われます。 PERL5DB デバッグのコードを持ってくるためのコマンドを指定 します。 設定されていないときには BEGIN { require 'perl5db.pl' } がデフォルトとして使用されます。 PERLLIB Perl のライブラリファイルを探すときに、標準のラ イブラリディレクトリとカレントディレクトリよりも 前に探しにいくディレクトリを、コンマで区切って並 べたリストです。 PERL5LIB が定義されているとき には、PERLLIB は使われません。 これら以外は、実行されるスクリプトとチャイルドプロセスから環 境変数が使えるようにするのを除いて Perl は環境変数を使用しま せん。 しかし、setuid で実行するスクリプトは何よりもまず以 下を行なうようにしてください: $ENV{'PATH'} = '/bin:/usr/bin'; # 必要なものを $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'}; $ENV{'IFS'} = '' if defined $ENV{'IFS'}; AUTHOR Larry Wall <lwall@netlabs.com>, 多くの方の助力を得て ファイル "/tmp/perl-e$$" -e commands によるテンポラリファイル "@INC" perl 5 ライブラリの位置 Perl manpages Last change: Release 5.0 Patchlevel 00 4 PERL(1) USER COMMANDS PERL(1) SEE ALSO a2p awk から perl へのトランスレータ s2p sed から perl へのトランスレータ DIAGNOSTICS -w スイッチは、幾分わかりやすい診断メッセージを出します。 すべての Perl の診断メッセージについては、perldiag manpage を参照してください。 コンパイル時のエラーでは、エラーの起こった行番号に、次に調べ られるはずだったトークンかトークンの型を示します。 (スクリ プトが -e スイッチで Perl に渡される場合には、-e スイッチ 1 つが 1 行とカウントされます。) setuid スクリプトでは、制限事項が増えるため、"Insecure depen- dency" といったエラーメッセージが表示されることがあります。 perlsec manpage を参照してください。 絶対に -w スイッチを使った方が良いっていうのは、もう書きまし たっけ ? BUGS -w スイッチが必須になっていません。 Perl は型のキャストや atof() や sprintf() のような様々な操作 のマシンごとの定義に依存します。 使用している標準入出力ライブラリが、read と write の間に seek や eof が必要なものであれば、Perl でも同様となります。 (ただし、sysread() や syswrite() には適用されません。) 組み込みのデータ型には (メモリサイズからくるものを除いて) 恣 意的なサイズの制限はありませんが、それでもいくつかの恣意的制 限は存在します: どの識別子も 255 文字より長くてはなりません し、-S を使った時、どの PATH も 255 文字より長くてはいけませ ん。 正規表現は、内部的にコンパイルされた時、32767 バイトを 越えることができません。 Perl は本当は「病的折衷主義ガラクタ出力機」(Pathologically Eclectic Rubbish Lister) を意味していますが、私がそういった 事をばらしてはいけません。 NOTES Perl のモットーは「やり方は 1 通りではない。」ということです。 このマニュアルを、後いくつに分割できるかは、宿題とします。 プログラマの 3 つの美徳は、無精、短気、傲慢です。 理由は、 キャメルブックを参照してください。 Perl manpages Last change: Release 5.0 Patchlevel 00 5