Perlドキュメントの読み方

by Hippo2000(2000/8/6)

Perlに限らず、プログラム開発においてドキュメントは必要不可欠です。

特にPerlの場合、かなり便利な機能があるのですが、あまり知られていないようです。
#というより、私が知らなかっただけか(^^;;

ちょっとその辺をまとめてみようと思います。


目次


1. ドキュメントの場所

当然すぎるほど当然ですが、ラクダ本(「プログラミングPerl」)が、最も基本的な、そしてもっとも重要な情報でしょう。

しかしPerlの場合、インストールするだけでドキュメントがついてきます。またインターネットから各種の最新ドキュメントを取得することができます。(特にCPANに登録されているモジュールを利用する場合には!)

そうした情報源を表にまとめとめてみました。

ここに上げているものは主に英語です。(^^;;;
基本的に単語を調べていけば、Perlや利用するモジュールに関連する技術に対する知識があれば、英語だからわからないというようなドキュメントではないだろうと思います。(モジュールの作者の多くが英語圏の人ばかりですからね)

#英語の読み方については、別途、個人的な経験についてまとめようとは思っています。.

場所 説 明
ローカル perldocやmanによる表示

(POD形式)

Perlのファイルにはドキュメントが埋め込まれています。
こうしたドキュメントはperldocなどのユーティリティで見ることができます。
特にUNIX系の場合にはmanによっても見ることが可能なことが多いようです。
POD形式をman、HTMLなどに変換するためいくつかのユーティリティが提供されています。
  HTML形式 ActivePerlの場合、インストールしたディレクトリの下にHTML形式のドキュメントが作成されます。
PPMでインストールすると、そのモジュールのHTML形式のドキュメントも登録されます。
(ActiveStateなどでHTML形式を用意しいている場合)
ex. c:\perl\html\index.html など

またHTMLヘルプの形式になっているものもあります。 c:\perl\htmlhelp (インストールしたディレクトリの下\htmlhelpというディレクトリ)

インターネット CPAN いわずと知れたPerl情報の中心。
CPAN: http://www.cpan.org など
  ActivePerlオンラインドキュメント ActiveStateはActivePerlの標準のヘルプをインターネット上でも公開しています。
http://www.activestate.com/ActivePerl/doc
  その他 DBIやWin32::ODBCなどモジュール開発者のホームページで情報を提供していることもあります。
インターネット
日本語
スクリプティング言語研究室(仮) http://www.kt.rim.or.jp/%7ekbk/index.html の"Perl 5.005付属のドキュメント邦訳 "
  Perl初心者の部屋 http://www.harukaze.net/~mishima/perl/index.html
ActivePerl版 Perl for Win32 FAQ 和訳:
 http://www.harukaze.net/~mishima/perl/index.html
  その他 河馬屋二千年堂のチョー訳もあります(^^;;;
他に情報がありましたら教えてください。

2. POD形式とその変換

2.1 POD形式

Perlのドキュメントの基本形はPOD(Plain Old Document)形式です。各モジュールのドキュメントはこの形式でプログラムに埋め込まれており、どこかにいってしまうといったことがありません。POD形式がどんなものであるか確かめる一番早い方法は、まずはPerlのモジュールファイルを探してその最後をのぞいてみることでしょう。

PODはパラグラフ単位で構成されます。パラグラフには「そのままのパラグラフ(verbatim paragraph)」、「コマンド・パラグラフ(command paragraph)」、「通常のテキストブロック(ordinary text block)」の3種類があります。その行がインデントされていれば(スペースやタブで開始)「そのままのパラグラフ」、その行の先頭が「=」であれば「コマンド・パラグラフ」、そのどちらでもなければ「通常のテキストブロック」です。各パラグラフは空行によって分割されます。

PODについての詳しい説明はperlpodやその日本語訳http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlpod.html などをご覧下さい。

コマンド・パラグラフのコマンド

コマンド 説明
=pod
=cut
PODをプログラムの中に埋め込むときに使われます。
=podから=cutまでを、コンパイラによる解釈を抑止し、フォーマッタにはPODとして認識させます。
=head1 ヘッダ
=head2 ヘッダ
=head1は第1レベルの、=head2は第2レベルのヘッダを出力します。
=over 数値
=item テキスト
=back
=overはリスト項目の開始、=itemはそのリスト項目、backはリストの終了を意味します。
=for X

=begin X
=end X
それぞれ特定のフォーマッタにだけ渡される部分を指定します。
=forはそのパラグラフ1つを、=beginと=endはその間のすべてのパラグラフを対象とします。

PODでのシーケンス(通常のテキストブロック、コマンド・パラグラフの一部で利用できます)

シーケンス 説明
I<テキスト> イタリックにします
B<ボールド> ボールドにします
S<テキスト> スペースが入っている文字列が分割されることを抑止します。
C<コード> リテラルコードとして表示
L<名前> 指定された名前に対するリンク

L<名前>      他のページ
L<名前/indent> 他のページのアイテム
L<名前/"sec">  他のページのセクション
L<"sec">      同じページのセクション

F<ファイル> ファイル名として表示
X<インデックス> 索引(?)
使い方が分かりませんでした。
Z<> 幅ゼロの文字
E<エスケープ> 名前付きの文字(HTMLでのエスケープそのまま)

E<lt>    <
E<gt>    >
E<htmlシーケンス>
       数値でないHTMLエンティティ

※HTMLに変換したところE<内容>は、&内容;といった形に変換されました。

POD形式で書かれたドキュメントは、ユーティリティを使ってUNIXのman形式、HTML、通常のテキストなどさまざまな形式に変換できます。最近ではPDF形式に変換できるユーティリティもあります。

またPerlインストールで提供されているユーテリティの1つh2xsは、モジュール作成のために雛型ファイルを作成してくれます。

それでは実際のPOD形式のドキュメントをテキストとHTMLに変換したものを見てみましょう。

PODのサンプル

=head1 河馬屋のテスト

ここが普通のテキストブロックになります
つまりB<このように>にすると太くなります。

このようにインデントされると「そのまま」扱いになります
つまりB<このように>しても太くなりません。シーケンスは無視されます。

=head2 レベル2のヘッダです

=over 4

=item * これが点付きの項目なのさ

=over 4

=item 1 ここは数字の入った項目なのさ

=over 4

=item 何もつかない普通の箇条書き(1)

=item 何もつかない普通の箇条書き(2)

=back

=item 2 ネストもできるってことだね

=back

=item * 最上位は点付き

=back

=for html <BR>
これはHTML専用なんよ<BR>

=begin html

そしてここから

ずっとここまではHTML専用なんよ

=end html

そしてここからはシーケンスのチェック:表示関係の
I<イタリック>、B<太字>、C<This is a pen>、F<c:/autoexec.bat>とか
エスケープシーケンス:E<lt>、E<gt>、E<Agrave>
なんかわ分かりやすいでしょう。

S<This is a pen>の効果はわかりにくいかも。
L<"河馬屋のテスト">なんかは日本語が入るとちょっと心配です。
X<index>、Z<>はわかるのかな?

テキスト形式(pod2txtによる変換)

HTML形式に変換 (pod2htmlによる変換)

2.2 ユーティリティの種類

Perlをインストールすると標準で以下のPODを扱うユーティリティが提供されます。

名前 説 明
検索・表示 perldoc 指定されたモジュール名、プログラム名に対応するドキュメントを検索し、表示します。
デフォルトでは、UNIXではman形式にWin32ではテキスト形式に変換します。
フォーマッタ pod2text テキスト形式に変換します。
  pod2html HTML形式に変換します。
  pod2man man形式に変換します
  pod2latex LaTex形式に変換します
  pod2usage POD形式を読みこんでUsageにあたる部分を表示します。

このほかPDF形式に変換するものなどが別に提供されています。

pod2pdf : http://search.cpan.org/search?module=Pod::Pdf


3. perldoc

変換ユーティリティのうちもっともよく使われるであろうperldocについて説明します。

perldocには大きく分けて3つのモードがあります。

(1)モジュール、プログラムを指定してそのドキュメントを表示する

perldoc [-h] [-v] [-t] [-u] [-m] [-l] [-F] [-X] ページ名|モジュール名|プログラム名

検索したいアイテム。ネストしたモジュール(File::Basenameのような)はFile::BasenameやFile/Basenameのどちらでも指定することができます。perlfuncのように説明のページ名も指定することができます。また"File::Basename"のために"basename"のように一部のみのや、大文字小文字の間違った指定もできます。しかしこれはより遅くなりまし、同じ部分名を持っているページが複数あったら最初の1つしか取得できません。

(2)組込関数の説明を表示する

perldoc -f 組込関数

(3)FAQをキーワード指定で表示する

perldoc -q FAQキーワード

利用できるオプションを以下の表にまとめます:

  意味 説  明
-h ヘルプ 簡単なヘルプメッセージの出力
-v 詳細説明 検索する手順についての途中経過を表示します。
-t テキスト出力 フォーマットなしでテキスト形式で出力。
Windowsではこれが標準。
-u フォーマット無し POD形式のまま出力
-m モジュール モジュールのコードも含めて、すべて表示されます。
-l ファイル名のみ 見つかったモジュールのファイル名を表示します。
-F ファイル 引数をファイル名と見なし、ディレクトリでの検索は行われません。
-f perl関数 -f オプションでperl組みこみ関数の名前を後ろに指定して呼び出すと、perlfuncからこの関数のドキュメントを取り出します。
-q perlfaq -q オプションは正規表現を引数として取ります。perlfaq[1-9]での質問ヘッダを検索し、その正規表現に一致するエントリを出力します。
-X インデックス使用 -X オプションはベース名が$Config{arglib}/pod.idxというファイルの中のコマンド行で与えられる名前にマッチするエントリを検索します。pod.idxファイルには完全に修飾されたファイルが1行ずつはいっていなければなりません。
-U セキュリティを甘くして実行 perldocは適切に汚染検知が行われておらず、セキュリティの問題を持っていることが分かっているので、通常それはスーパーユーザとしては実行されません。もし-Uフラグを使えば実行できますが、限定されます。

4. ちょっとした小技

メーリング・リストなどで見かけた、ドキュメントを扱う上でちょっと知っておくと便利かな思ったことをまとめます。

  1. Win98でperldocのリダイレクトをファイルに落としたい
    Win98ではバッチのパイプがうまく機能しないため、ファイルに落とそうとして

    perldoc モジュール名 > 出力ファイル名

    としても画面に表示され出力ファイルは空のままということになります。
    そこで

    perl -x -S perldoc モジュール名 > 出力ファイル名

    とすると、今度はきちんとファイルに出力されます。-xは余分な文字列の読み飛ばし、-SはPATH環境変数を使ってプログラムファイルを検索させるオプションです。

    あるいは

    pod2html --outfile 出力ファイル名 モジュール名

    によってHTML形式ファイルを出力させるという方法もあります。
  2. モジュールのあるディレクトリに移らずに他の形式に変換する

    perldocは検索してくれますが、変換ユーティリティはそんなことしてくれません。そこでperldocにドキュメントを検索させ、それを-u(つまり元のまま)で出力させ、それをパイプさせることにより、その場で好みのフォーマットに変換した結果を取得することが出来ます。

    perldoc -u モジュール名 | pod2html

    ※ Win98ではバッチのパイプがうまく機能しないために、これもうまく行きません。(NTだと問題ないはず)

ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。