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 のルーティンや定義をアクセスすることができます。

     + パッケージコンストラクタとデストラクタ
          新しい BEGINEND ブロックは、パッケージがコンパイル
          されるときと、プログラムが終了した後に制御を受け取るた
          めに使われます。 縮退した形として、-p や -n スイッチを
          用いたときには awk の BEGINEND のように動作します。

     + 複数の同時 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() のような様々な操作
     のマシンごとの定義に依存します。

     使用している標準入出力ライブラリが、readwrite の間に
     seekeof が必要なものであれば、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