perlmodlib - 新たな Perl モジュールを作ったり、既にあるものを検索する
Perlの配布パッケージには、たくさんのモジュールが含まれています。 そのようなモジュールは後で説明しますが、 そのファイル名の終端は全て .pm になっています。 コンパイルされたライブラリファイル(普通は .so で終わっています) や autoload されるべきモジュールの小さい断片 (.al で終わっています) を 発見するかもしれません; これらはインストール処理によって自動的に 生成されます。 同様に、.pl や .ph で終わっているものを ライブラリディレクトリで発見するかもしれません。 これらのファイルは古いライブラリで、これを使う古いプログラムは今でも 実行可能です。 .pl ファイルは、最終的には標準モジュールへと変換され、 h2ph によって作成された .ph ファイルは h2xs によって 作成された拡張モジュールのようになるでしょう(幾つかの .ph の値は既に POSIX, Errno, Fcntl モジュールを通じて入手可能です)。 配布パッケージにあるファイル pl2pm はあなたの変換作業を助けてくれるかも しれませんが、これは機械的に処理するもので完全なものには程遠いものです。
これはあなたのプログラムのコンパイルに影響を及ぼすコンパイラ指示子 (プラグマタ)のように動作します。 このため、通常は use
もしくは no
と一緒に使われたときにだけ働きます。 これらのほとんどはレキシカルなスコープなので、内側のブロックでは 以下のようにして取り消すことができます:
no integer;
no strict 'refs';
no warnings;
これは BLOCK の終端まで有効です。
いくつかのプラグマはレキシカルスコープを持ちます -- 典型的には $^H
ヒント変数に影響を与えます。 その他のものは、use vars
や use subs
のように、代わりに現在の パッケージに影響を与えます; これによって、単に一つのブロックではなく 特定の ファイル の中に変数やサブルーチンを事前宣言できます。 このような宣言は、ファイル全体に宣言したい場合に効果的です。 これは no vars
や no subs
で撤回できません。
以下のプラグマが定義されています(そして独自のドキュメントがあります)。
サブルーチンや変数の属性を取得・設定する
サブルーチンの属性をを取得・設定する(古いもの)
モジュールの読み込みを、関数が使われるまで延期する
コンパイル時に基底クラスを使って IS-A 関係を構築する
Perl のための透過的な BigInteger サポート
Perl のための透過的な BigNumber サポート
Perl のための透過的な BigNumber/BigRational サポート
MakeMaker の、パッケージのインストールされていないバージョンを使う
文字単位ではなくバイト単位であることを強制する
\N{named}
文字リテラルエスケープのための文字名を定義する
定数を宣言する
冗長な警告検査を出力する
非 ascii や 非 utf8 でスクリプトを書けるようにする
暗黙のエンコーディング変換を警告する
新しい構文機能を有効にする
コンパイル時のクラスフィールド
ファイルテストパーミッション演算子を制御する
条件を満たした時にだけ Perl モジュールを use
する
数値演算を、浮動小数点数ではなく整数で行う
より少ない何かを要求する
コンパイル時に @INC を操作する
組み込み演算に対しての POSIX ロケールを使ったり、無視したりする
メソッド解決順序
入出力のためのデフォルト PerlIO 層をセットする
コンパイル時に、安全でない操作を制限する
Perl 演算をオーバーロードするパッケージ
正規表現の動作を変更する
単純なシグナルハンドリングを有効にする
sort() の振る舞いを制御する
安全でないコンストラクトを制限する
サブルーチンの名前を先行宣言する
Perl のインタプリタベースのスレッド
スレッド間でデータ構造を共有する Perl 拡張
ソースコードでの UTF-8 (または UTF-EBCDIC) を有効/無効にする
大域変数名を先行宣言する(古いもの)
バージョンオブジェクトのための Perl エクステンション
VMS固有の言語仕様を制御する
追加の警告を制御する
インポート関数の警告
標準でバンドルされている名前空間の汚染を考慮する良く定義されたマナーに 基づいた振る舞いを期待されるモジュールです。 これは Exporter モジュールを使っているからです。 詳細についてはそれぞれのドキュメントを参照してください。
以下にリストされたモジュールが全てはインストールされていない可能性が あります。 例えば、GDBM_File モジュールは gdbm ライブラリがなければ インストールされません。
複数のDBMに対するフレームワークを提供する
汎用アーカイブ展開機構
tar アーカイブの操作のためのモジュール
Archive::Tar から、メモリの中にファイルを展開する派生クラス
属性ハンドラのより単純な定義
要求されたサブルーチンのみをロードする
autoloadingのためにパッケージを分割する
Perl コンパイラ
Perl の構文木を辿り、演算子に関する簡潔な情報を表示する
Perl の構文木を辿り、演算子に関するデバッグ情報を表示する
perl コードを出力するための Perl コンパイラのバックエンド
Perl の lint
関数やファイルで使われているレキシカル変数を表示する
Perl 構文木を辿って、演算子に関する簡潔な説明を表示する
Perl プログラムのためのクロスリファレンスレポートを生成する
Perl コードの実行時間のベンチマーク
シンプルな Common Gateway Interface クラス
CGI.pm のための過去互換性モジュール
HTTPD(またはその他の)エラーログを書くための CGI ルーチン
Netscape Cookies へのインターフェース
Fast CGI のための CGI インターフェース
いい感じにフォーマットされた HTML コードを生成するモジュール
サーバープッシュのためのシンプルなインターフェース
今はなき CGI::Switch モジュールのための過去互換性モジュール
CGI モジュールで使われる内部ユーティリティ
Perl のコアルーチンのための擬似名前空間
CPAN サイトから perl モジュールを問い合わせ、ダウンロード、ビルドする
CPAN.pm でプログラミングするためのレシピブック
CPAN::Config ファイル初期化のためのユーティリティ
CPAN.pm と Kwalify.pm の間のインターフェース
XS モジュールを使わない CPAN.pm のラッパ
CPAN バージョンを比較するためのユーティリティ関数
CPAN ミラーへの API と CLI アクセス
カスタム配布クラスの基底クラス
自身の Dist::* プラグインを作成するためのサンプルコード
CPANPLUS による CPAN.pm エミュレーション
自身のプラグインの書き方のドキュメント
エラーの警告(呼び出し側の視点から)
重機であり、内部にユーザーが使える部分はない
クラスの ISA 木の検索パスを報告する
構造体に似たデータ型を Perl クラスとして宣言する
zlib 圧縮ライブラリへの低レベルインターフェース
zlib 圧縮ライブラリへのインターフェース
Perlのコンフィグレーション情報にアクセスする
カレントの作業ディレクトリのパス名を取得する
Perl デバッグ API へのプログラム可能なインターフェース
フィルタ DBM キー/値
DBM_Filter のためのフィルタ
DBM_Filter のためのフィルタ
DBM_Filter のためのフィルタ
DBM_Filter のためのフィルタ
DBM_Filter のためのフィルタ
Berkeley DB バージョン 1.x に対する Perl5 アクセス
表示と eval
に適した文字列化 perl データ構造
Perl コードプロファイラ
あるパッケージの、全ての内部パッケージを見つける
XS プログラマのためのデータデバッグツール
SelfLoading モジュールに対するスタブを生成する
メッセージダイジェストを計算するモジュール
MD5 アルゴリズムへの Perl インターフェース
SHA-1/224/256/384/512 のための Perl エクステンション
Digest 基底クラス
ファイルのダイジェストを計算する
ディレクトリハンドル用のオブジェクトメソッドを提供する
Perl データのスクリーンダンプを提供する
Cのライブラリを動的にPerlプログラムにロードする
文字エンコーディング
エンコーディングへの別名定義
単一バイトエンコーディング
Encode::??::ISO_2022_* によって内部で使用されている
中国での中国語エンコーディング
Encode::CN によって内部で使用されている
Encode によって内部で使用されている
EBCDIC エンコーディング
オブジェクト指向のエンコーダ
Encode 実装基底クラス
ESTI GSM 03.38 エンコーディング
データからエンコーディングを推測する
日本語エンコーディング
Encode::JP::2022_JP* によって内部で使用されている
Encode::JP によって内部で使用されている
韓国語エンコーディング
Encode::KR によって内部で使用されている
MIME 'B' ヘッダと MIME 'Q' ヘッダのエンコーディング
Encode で内部的に使われる
Encode と PerlIO の詳細ドキュメント
Encode で対応しているエンコーディング
シンボルエンコーディング
台湾での中国語エンコーディング
様々な Unicode 変換形式
UTF-7 エンコーディング
読みにくい句読点変数に対して読みやすい英語(もしくは awk)の名前を使う
環境変数をスカラ変数または配列変数としてインポートする Perl モジュール
システムの errno 定数
モジュールのためのデフォルト import メソッドを実装する
Exporter の中身
Perl モジュールのために C コードをコンパイル・リンクする
Windows プラットフォームのためのビルダークラス
Makefile などの中の一般的な UNIX コマンドを置き換えるためのユーティリティ
Makefile の中で使うための MM のコマンド
C ヘッダ定数をインポートするための XS コードを生成する
ExtUtils::Constant オブジェクトのための基底クラス
ExtUtils::Constant のためのヘルパー関数
ExtUtils::Constant オブジェクトのための基底クラス
CやC++アプリケーションにPerlを組み込むためのユーティリティ
こちらからあちらにファイルをインストールする
インストールしたモジュールの目録管理
ライブラリを使うために使用するライブラリを決定する
OS によって調整した ExtUtils::MakeMaker の派生クラス
AIX 固有の ExtUtils::MM_Unix の派生クラス
プラットフォームが分からない場合の MM メソッド
ExtUtils::MakeMaker での UN*X の振る舞いを上書きするメソッド
ExtUtils::MakeMaker での UN*X の振る舞いを上書きするメソッド
DOS 固有の ExtUtils::MM_Unix の派生クラス
MacOS Classic のために一度生成された Makefile
ExtUtils::MakeMaker での UN*X の振る舞いを上書きするメソッド
ExtUtils::MakeMaker での UN*X の振る舞いを上書きするメソッド
QNX 固有の ExtUtils::MM_Unix の派生クラス
U/WIN 固有の ExtUtils::MM_Unix の派生クラス
ExtUtils::MakeMaker によって使用されるメソッド群
ExtUtils::MakeMaker での UN*X の振る舞いを上書きするメソッド
VOS 固有の ExtUtils::MM_Unix の派生クラス
ExtUtils::MakeMaker での UN*X の振る舞いを上書きするメソッド
Win9X のために MakeMaker をカスタマイズするメソッド
カスタマイズのための ExtUtils::MakeMaker の派生クラス
モジュールの Makefile を生成する
Config.pm のラッパー
MakeMaker に関するよくある質問とその答え
MakeMaker でモジュールを書く
バージョンが分からないときの bytes.pm
プラットフォームが分からないときの vmsish.pm
MANIFEST ファイルを書き出したりチェックしたりするためのユーティリティ
DyaLoaderによって使用されるブートストラップファイルを作成する
動的拡張のためのリンカーオプションファイルを書き出す
Perl XS コードを C コードに変換する
.packlist ファイルを管理する
@INC に blib/* ディレクトリを追加する
成功しなければ die する等価な関数に置き換える
C の Fcntl.h の定義をロードする
ファイルパスをディレクトリ、ファイル名、拡張子にパースする
木に対して多くのファイル検査を実行する
ファイルやファイルハンドルを比較する
ファイルやファイルハンドルを複写する
一般的なファイルフェッチ機構
DOS 風グロブ
ディレクトリツリーを辿る
BSD グロブルーチンのための Perl エクステンション
入出力ファイルを許可するようにファイルグロブを拡張する
ディレクトリツリーを生成・削除する
ファイル名に関して移植性ある操作を提供する
Cygwin file specs のためのメソッド
Epoc file specs のためのメソッド
ファイル名に関して移植性ある操作を提供する
Mac OS (Classic) のための File::Spec
OS/2 file specs のためのメソッド
その他の File::Spec モジュールの基礎となる、Unix のための File::Spec
VMS file specs のためのメソッド
Win32 file specs のためのメソッド
一時ファイルの名前とハンドルを安全に返す
名前による Perl の組み込み関数 stat() に対するインターフェース
システムの制限よりも多くのファイルを開く
ファイルハンドルのためのオブジェクトメソッドを提供する
単純化したソースフィルタリング
Perl ソースフィルタユーティリティモジュール
オリジナルの Perl スクリプトのディレクトリ位置を特定する
gdbm ライブラリに対する Perl5 アクセス
拡張されたコマンドラインオプションの処理
まとまったスイッチのある一文字スイッチの処理
一般的なユーティリティハッシュサブルーチンの選集
Inside-Out クラスのサポート
8 ビットのスカラデータを、カレントのロケールに従って比較する
RFC3066-形式の言語タグを扱うための関数
ユーザーの言語プリファレンスを検出する
自然言語のためのタグと名前
ロケール情報を問い合わせる
様々な IO モジュールをロードする
IO::Compress モジュールの基底クラス
RFC 1950 ファイル/バッファを書く
RFC 1952 ファイル/バッファを書く
RFC 1951 ファイル/バッファを書く
zip ファイル/バッファを書く
ディレクトリハンドルのためのオブジェクトメソッドを提供する
ファイルハンドルのためのオブジェクトメソッドを提供する
I/O ハンドルのためのオブジェクトメソッドを提供する
パイプのためのオブジェクトメソッドを提供する
システムポーリング呼び出しのためのオブジェクトインターフェース
I/O オブジェクトのための seek ベースのメソッドを提供する
select システムコールに対する OO インターフェース
ソケット通信のためのオブジェクトインターフェース
AF_INET ドメインソケットのためのオブジェクトインターフェース
AF_UNIX ドメインソケットのためのオブジェクトインターフェース
zlib ベースの (zip, gzip) ファイル/バッファを展開する
gzip, zip, bzip2, lzop ファイル/バッファを展開する
IO::Uncompress モジュールのための基底クラス
RFC 1952 ファイル/バッファを読み込む
RFC 1950 ファイル/バッファを読み込む
RFC 1951 ファイル/バッファを読み込む
zip ファイル/バッファを読み込む
Compress::Zlib への IO:: 風のインターフェース
システムコマンドの検索と実行を簡単にする
読み込みと書き込みの両方のためにプロセスを開く
読み込み、書き込み、エラー処理のためにプロセスを開く
SysV IPC 定数
SysV Msg IPC オブジェクトクラス
SysV Semaphore IPC オブジェクトクラス
一般的なユーティリティリストサブルーチンの選集
ロケールコード定数
国識別のための ISO コード (ISO 3166)
通貨識別のための 3 文字 ISO コード(ISO 4217)
言語識別のための 2 文字 ISO コード(ISO 639)
地域化のためのフレームワーク
Locale::Maketext::Lexicon への単純なインターフェース
ソフトウェア地域化に関する記事
文字体系識別のための ISO コード (ISO 15924)
汎用メッセージ保管機構
Log::Message のオプションを設定する
Log::Message のメッセージハンドラ
Log::Message のメッセージオブジェクト
base64 文字列のエンコードとデコード
quoted-printable 文字列のエンコードとデコード
多倍長実数の数学パッケージ
多倍長整数/浮動小数点数の数学パッケージ
Math::BigInt に対応する Pure Perl モジュール
BigInt コードの低レベル計算をエミュレートする
高速化のために XS にした Math::BigInt::Calc
任意桁の有理数
複素数とそれに関連する数学的な関数
三角関数
メモリを犠牲にして関数を高速化する
Storable での使用のために AnyDBM_File に EXISTS を提供するための糊
記憶した値の自動的な破棄のためのプラグインモジュール
Memoize の破棄動作のためのテスト
Memoize の破棄動作のためのテスト
Storable での使用のために NDBM_File に EXISTS を提供するための糊
Storable での使用のために SDBM_File に EXISTS を提供するための糊
記憶したデータを Storable データベースに保管する
Perl モジュールのビルドとインストール
モジュール作者のための API リファレンス
Module::Build モジュールを書く
Module::Build のデフォルトメソッド
ExtUtils::MakeMaker との互換性
Module::Build の設定
Module::Build の使用法の例
perl モジュールファイルからパッケージと POD の情報を集める
$module_name の設定
Perl Package Manager ファイル作成
Amiga プラットフォームのためのビルダークラス
不明なプラットフォームのための派生クラス
EBCDIC プラットフォームのためのビルダークラス
MPEiX プラットフォームのためのビルダークラス
MacOS プラットフォームのためのビルダークラス
RiscOS プラットフォームのためのビルダークラス
Unix プラットフォームのためのビルダークラス
VMS プラットフォームのためのビルダークラス
VOS プラットフォームのためのビルダークラス
Windows プラットフォームのためのビルダークラス
AIX プラットフォームのためのビルダークラス
Cygwin プラットフォームのためのビルダークラス
Mac OS X プラットフォームのためのビルダークラス
OS/2 プラットフォームのためのビルダークラス
YAML.pm がインストールされていなくても Module::Build が動作するだけの YAML サポートを提供する
バージョン別に、perl と共に配布されているモジュールの一覧
モジュールとファイルの両方で必要とするランタイム
実行時にモジュール情報の検索と読み込みを行う
モジュールを読み込み済みまたは未読み込みとマークする
モジュールにプラグインを持つ能力を自動的に与える
モジュールにプラグインを持つ能力を自動的に与える
ndbm ファイルに対する tie されたアクセス
メソッドの再発行(redispatch)を可能にする擬似クラス NEXT(など)を提供する
(FTP, SMTP などで使われる) ネットワークコマンドクラス
libnet のためのローカル設定
現在のホストのインターネット名とドメインを評価しようとする
FTP クライアントクラス
NNTP クライアントクラス
ユーザーの netrc ファイルへの OO インターフェース
Post Office Protocol 3 (RFC1939) クライアントクラス
リモートホストへの到達性をチェックする
Simple Mail Transfer Protocol クライアント
time と daytime のネットワーククライアントインターフェース
Perl の組み込み関数 gethost*() に対する名前によるインターフェース
libnet のよくある質問と答え
Perl の組み込み関数 getnet*() に対する名前による インターフェース
Perl の組み込み関数 getproto*() に対する名前による インターフェース
Perl の組み込み関数 getserv*() に対する名前による インターフェース
Perl コンパイラバックエンドへの一般的なインターフェース
odbm ファイルへの tie されたアクセス
Perl プログラムのコンパイル時に 名前の付いたオペコードを禁止する
IEEE Standard 1003.1 に対するインターフェース
パッケージで宣言されている全ての定数をリストする
汎用入力パース/チェック機構
PerlIO 層のオンデマンドな読み込みと、PerlIO::* 名前空間のルート
encoding 層
インメモリ IO とスカラ IO
perl で実装されている PerlIO 層のヘルパークラス
quoted-printable 文字列のための PerlIO 層
POD ドキュメントの文法エラーをチェックする
For resolving Pod E<...> sequences
ディレクトリツリーから POD ドキュメントを見つける
Perl の関数を perlfunc.pod 風に集める
POD ファイルを HTML に変換するモジュール
POD 入力段落、コマンドなどを表現するオブジェクト
POD データをフォーマットされた Latex に変換する
POD データをフォーマットされた *roff 入力に変換する
POD テキスト中の L<> フォーマットコードをパースする
POD のパースと変換のためのヘルパークラス
POD フィルタと変換器をを作成するための基底クラス
Perldoc に Pod のエラーをチェックさせる
Perldoc に POD を man ページとして表現させる
Perldoc に POD を nroff に変換させる
Perldoc に POD を…PODとして表現させる!
Perldoc に POD を RTF として表現させる
Perldoc に POD をプレーンテキストとして表現させる
Perldoc に、POD の表現に Tk::Pod を使うようにさせる
Perldoc に POD を XML として表現させる
POD データをフォーマットされた ASCII テキストに変換する
POD を古い形式の POD に変換するための Perl エクステンション
入力から POD の選択した章を抽出する
POD をパースするためのフレームワーク
ドキュメントの POD 文法をチェックする
Pod::Simple をトレース/デバッグモードにする
POD パース時のイベントをテキストとしてダンプする
POD を XML に変換する
POD を HTML に変換する
複数のPOD ファイルを複数の HTML ファイルに変換する
L コードの "section" 属性の表現
Pod::Simple イベントをメソッド呼び出しに変換する
POD をパースするためのプルパーサーインターフェース
Pod::Simple::PullParser からの End トークン
Pod::Simple::PullParser からの Start トークン
Pod::Simple::PullParser からの Text トークン
Pod::Simple::PullParser からのトークン
POD を RTF として整形する
ディレクトリツリーから POD ドキュメントを検索する
POD を単純なパースツリーにパースする
Pod::Simple の派生クラスとしてフォーマッターを書く
POD をプレーンテキストとして整形する
POD のテキストコンテンツを得る
POD を XML に変換する
POD データを整形された ASCII テキストに変換する
POD データを整形された色付き ASCII テキストに変換する
POD データを整形された重ね打ちテキストに変換する
POD データを整形されたエスケープつきの ASCII テキストに変換する
組み込みの POD ドキュメントから使用法を表示する
sdbm ファイルに対する tie されたアクセス
制限された領域でプログラムのコンパイルと実行を行う
汎用ユーティリティスカラサブルーチンの選集
辞書ファイルにあるキーを検索する
選択されたファイルハンドルの保存と復帰を行う
必要な関数のみをロードする
Perl の中から透過的にシェルコマンドを実行する
Cの socket.h にある定義と構造体操作子(structure manipulators)を ロードする
Perl データ構造の永続化
Perl のための switch 文
Perlのシンボルとその名前を操作する
ホスト名を取得する考えられるすべての方法を試行する
UNIX の syslog(3) コールに対する Perl インターフェース
Sys::Syslog の Win32 対応
ANSI エスケープシーケンスを使った色付き画面出力
Perl の termcap インターフェース
語の補完モジュール
様々な readline
パッケージに対する Perl インターフェース
Term::ReadLine UI を簡単にする
テストスクリプトを書くための単純なフレームワークを提供する
テストライブラリをビルドするためのバックエンド
テストモジュールの基底クラス
ビルドされたテストスイートをテストする
Test::Builder::Tester を色付きにする
Perl の標準テストスクリプトを統計を取りながら実行する
単純なアサート
Test::Harness の内部反復子
ひとつのテストポイントを追跡するためのオブジェクト
単一のテストファイルの結果を追跡するためのオブジェクト
テスト結果の詳細な分析
TAP フォーマットのドキュメント
Test::Harness::* のためのユーティリティ関数
テストスクリプトを書くためのもう一つのフレームワーク
テストを書くための基本的なユーティリティ
本当に基本的なテストを書くためのチュートリアル
リストから略語テーブルを作成します
文字列からデリミタで区切られたテキスト列を抽出する
テキストを解析してトークンの配列や配列の配列にします
soundex アルゴリズムの実装
UNIX の expand(1) や unexpand(1) のようにタブの展開やタブへの置換を行う
単純なパラグラフに対する行ラッピング
Perl のスレッドを操作する (古いコード専用)
スレッドセーフなキュー
スレッドセーフなセマフォ
tie された配列のための基底クラス
ディスクのファイルの行に Perl の配列経由でアクセスする
tie されたハンドルのためのベースクラスの定義
tie されたハッシュのためのベースクラス
名前付き正規表現捕捉バッファ
必要なときにハッシュにデータを追加する
ハッシュキーとしてリファレンスを使う
tie されたスカラのための基底クラスの定義
テーブルサイズ固定、キー長固定のハッシング
高精度の alarm, sleep, gettimeofday, 内部タイマー
local と GMT 時刻からの効率良い計算
オブジェクト指向の時刻オブジェクト
秒数を他の日付値に変換する単純な API
Perl の組み込み関数 gmtime() に対する名前によるインターフェース
Perl の組み込み関数 localtime() に対する名前によるインターフェース
Time::gmtime や Time::localtime によって使われる内部的なオブジェクト
すべてのクラス(bless されたリファレンス)のための基底クラス
Unicode 照合アルゴリズム
Unicode 正規化形式
Unicode 文字データベース
Perl の組み込み関数 getgr*() に対する名前によるインターフェース
Perl の組み込み関数 getpw*() に対する名前によるインターフェース
Win32 API 関数へのインターフェース
ファイル/ディレクトリのための Win32 システム API への低レベルアクセス
Win32 CORE 関数のスタブ
perl C API をテストする
perl と共に配布されている XS typemaps をテストするモジュール
C ライブラリを Perl コードに動的に読み込む
あなたの使っているシステムでインストールされているドキュメントの ないものや標準リリースにはないものを含めた すべての モジュールを 見つけ出すためには、以下のコマンドを使ってください (デフォルトの win32 のシェルでは、シングルクォートの代わりに ダブルクォートを使うべきです)。
% perl -MFile::Find=find -MFile::Spec::Functions -Tlwe \
'find { wanted => sub { print canonpath $_ if /\.pm\z/ },
no_chdir => 1 }, @INC'
(ここでの -T は @INC に入っている一覧から '.' を取り除くためです。) これらはすべて独自のドキュメントをインストールして、システムの man(1) こまんどでアクセス可能なはずです。 もし find プログラムがないなら、代わりに perl で実行できる Perl コードを 生成する Perl の find2perl プログラムが使えます。 もし man プログラムはあるけれどもモジュールが見つからない場合は、 manpath を修正する必要があります。 詳細については perl を参照してください。 もしシステムの man コマンドがないなら、perldoc プログラムを 試してみてください。
さらに、 perldoc perllocal
というコマンドで(不完全かもしれませんが) 追加でシステムにインストールされたモジュールの一覧が表示されます。 (perllocal.pod ファイルは標準の MakeMaker によるインストール処理で 更新されます。)
拡張モジュールは C(もしくは Perl と C の混合)で書かれます。 これらは普通は必要になったときに動的に Perl へロードされますが、 静的にリンクされる場合もあります。 サポートされている拡張モジュールには Socket, Fcntl, POSIX があります。
多くの良く知られた C 拡張モジュールは、そのサイズであるとか 揮発性、あるいは単純に十分なテストをする時間がなかったとか Perl がベータテストされているプラットフォームでコンフィグレーションする 時間が無かったためにバンドルされていません(少なくとも完全には)。 こういったモジュールは、CPAN (後述します) や、 Alta Vista や Google といったウェブ検索エンジンを使って探すことを お勧めします。
CPAN は Perl に関する統合的な保管ネットワークを意味しています; これは、世界中に複製されている Perl に関する事柄のグローバルな コレクションで、ドキュメント、スタイルガイド、罠と技、非 Unix システムへの 移殖とそのための一時的なバイナリ配布などを含みます。 CPAN の検索エンジンは http://www.cpan.org/ にあります。
もっとも重要なことは、CPAN には配布パッケージには バンドルされていないたくさんのモジュールも含まれています; その中にはビルドに C コンパイラが必要なものもあります。 以下に挙げるのは、モジュールの大まかな分類です。
言語拡張と、ドキュメントツール
開発サポート
オペレーティングシステムインターフェース
ネットワーク、デバイス制御(モデム)、プロセス間通信
データ型と、データ型ユーティリティ
データベースインターフェース
ユーザーインターフェース
他のプログラミング言語のエミュレーションや 他のプログラミング言語に対するインターフェース
ファイル名、ファイルシステム、ファイルのロッキング(ファイルハンドルも 参照してください)
文字列処理、言語テキスト(Language Text)の処理、解析、検索
オプション、引数、パラメータ、ファイル処理のコンフィグレーション
国際化対応とロケール
認証、セキュリティ、暗号化
World Wide Web, HTML, HTTP, CGI, MIME
サーバーやデーモンのユーティリティ
アーカイブと圧縮
イメージ、Pixmap、ビットマップの操作、描画
メイルと Usenet ニュース
制御フローユーティリティ(コールバックや例外など)
ファイルハンドルや入出力ストリームのユーティリティ
その他のモジュール
登録されている CPAN サイトには以下に挙げるものがあります。 ソート順はフィールド毎にアルファベット順であることに注意してください:
Continent
|
|-->Country
|
|-->[state/province]
|
|-->ftp
|
|-->[http]
従って、北アメリカサーバはヨーロッパと南アメリカのサイトの間に リストされてしまっています。
この中から最も近いものを選ぶのが良いでしょう。
http://ftp.rucus.ru.ac.za/pub/perl/CPAN/
ftp://ftp.rucus.ru.ac.za/pub/perl/CPAN/
ftp://ftp.is.co.za/programming/perl/CPAN/
ftp://ftp.saix.net/pub/CPAN/
ftp://ftp.sun.ac.za/CPAN/CPAN/
http://cpan.linuxforum.net/
http://cpan.shellhung.org/
ftp://ftp.shellhung.org/pub/CPAN
ftp://mirrors.hknet.com/CPAN
http://mirrors.tf.itb.ac.id/cpan/
http://cpan.cbn.net.id/
ftp://ftp.cbn.net.id/mirror/CPAN
ftp://ftp.iglu.org.il/pub/CPAN/
http://cpan.lerner.co.il/
http://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
ftp://ftp.u-aizu.ac.jp/pub/CPAN
ftp://ftp.kddlabs.co.jp/CPAN/
ftp://ftp.ayamura.org/pub/CPAN/
ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
http://ftp.cpan.jp/
ftp://ftp.cpan.jp/CPAN/
ftp://ftp.dti.ad.jp/pub/lang/CPAN/
ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
http://cpan.MyBSD.org.my
http://mirror.leafbug.org/pub/CPAN
http://ossig.mncc.com.my/mirror/pub/CPAN
http://cpan.tomsk.ru
ftp://cpan.tomsk.ru/
ftp://ftp.isu.net.sa/pub/CPAN/
http://CPAN.en.com.sg/
ftp://cpan.en.com.sg/
http://mirror.averse.net/pub/CPAN
ftp://mirror.averse.net/pub/CPAN
http://cpan.oss.eznetsols.org
ftp://ftp.oss.eznetsols.org/cpan
http://CPAN.bora.net/
ftp://ftp.bora.net/pub/CPAN/
http://mirror.kr.FreeBSD.org/CPAN
ftp://ftp.kr.FreeBSD.org/pub/CPAN
ftp://ftp.nctu.edu.tw/UNIX/perl/CPAN
http://cpan.cdpa.nsysu.edu.tw/
ftp://cpan.cdpa.nsysu.edu.tw/pub/CPAN
http://ftp.isu.edu.tw/pub/CPAN
ftp://ftp.isu.edu.tw/pub/CPAN
ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/
http://ftp.tku.edu.tw/pub/CPAN/
ftp://ftp.tku.edu.tw/pub/CPAN/
ftp://ftp.loxinfo.co.th/pub/cpan/
ftp://ftp.cs.riubon.ac.th/pub/mirrors/CPAN/
http://ftp.ucr.ac.cr/Unix/CPAN/
ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/
http://cpan.inode.at/
ftp://cpan.inode.at
ftp://ftp.tuwien.ac.at/pub/CPAN/
http://ftp.easynet.be/pub/CPAN/
ftp://ftp.easynet.be/pub/CPAN/
http://cpan.skynet.be
ftp://ftp.cpan.skynet.be/pub/CPAN
ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/
http://cpan.blic.net/
http://cpan.online.bg
ftp://cpan.online.bg/cpan
http://cpan.zadnik.org
ftp://ftp.zadnik.org/mirrors/CPAN/
http://cpan.lirex.net/
ftp://ftp.lirex.net/pub/mirrors/CPAN
http://ftp.linux.hr/pub/CPAN/
ftp://ftp.linux.hr/pub/CPAN/
ftp://ftp.fi.muni.cz/pub/CPAN/
ftp://sunsite.mff.cuni.cz/MIRRORS/ftp.funet.fi/pub/languages/perl/CPAN/
http://mirrors.sunsite.dk/cpan/
ftp://sunsite.dk/mirrors/cpan/
http://cpan.cybercity.dk
http://www.cpan.dk/CPAN/
ftp://www.cpan.dk/ftp.cpan.org/CPAN/
ftp://ftp.ut.ee/pub/languages/perl/CPAN/
ftp://ftp.funet.fi/pub/languages/perl/CPAN/
http://mirror.eunet.fi/CPAN
http://www.enstimac.fr/Perl/CPAN
http://ftp.u-paris10.fr/perl/CPAN
ftp://ftp.u-paris10.fr/perl/CPAN
http://cpan.mirrors.easynet.fr/
ftp://cpan.mirrors.easynet.fr/pub/ftp.cpan.org/
ftp://ftp.club-internet.fr/pub/perl/CPAN/
http://fr.cpan.org/
ftp://ftp.lip6.fr/pub/perl/CPAN/
ftp://ftp.oleane.net/pub/mirrors/CPAN/
ftp://ftp.pasteur.fr/pub/computing/CPAN/
http://mir2.ovh.net/ftp.cpan.org
ftp://mir1.ovh.net/ftp.cpan.org
http://ftp.crihan.fr/mirrors/ftp.cpan.org/
ftp://ftp.crihan.fr/mirrors/ftp.cpan.org/
http://ftp.u-strasbg.fr/CPAN
ftp://ftp.u-strasbg.fr/CPAN
ftp://cpan.cict.fr/pub/CPAN/
ftp://ftp.uvsq.fr/pub/perl/CPAN/
ftp://ftp.rub.de/pub/CPAN/
ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
ftp://ftp.uni-erlangen.de/pub/source/CPAN/
ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/CPAN
http://pandemonium.tiscali.de/pub/CPAN/
ftp://pandemonium.tiscali.de/pub/CPAN/
http://ftp.gwdg.de/pub/languages/perl/CPAN/
ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
ftp://ftp.leo.org/pub/CPAN/
http://cpan.noris.de/
ftp://cpan.noris.de/pub/CPAN/
ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
ftp://ftp.gmd.de/mirrors/CPAN/
ftp://ftp.acn.gr/pub/lang/perl
ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
ftp://ftp.ntua.gr/pub/lang/perl/
http://ftp.kfki.hu/packages/perl/CPAN/
ftp://ftp.kfki.hu/pub/packages/perl/CPAN/
http://ftp.rhnet.is/pub/CPAN/
ftp://ftp.rhnet.is/pub/CPAN/
http://cpan.indigo.ie/
ftp://cpan.indigo.ie/pub/CPAN/
http://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
ftp://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
http://sunsite.compapp.dcu.ie/pub/perl/
ftp://sunsite.compapp.dcu.ie/pub/perl/
http://cpan.nettuno.it/
http://gusp.dyndns.org/CPAN/
ftp://gusp.dyndns.org/pub/CPAN
http://softcity.iol.it/cpan
ftp://softcity.iol.it/pub/cpan
ftp://ftp.unina.it/pub/Other/CPAN/CPAN/
ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
ftp://cis.uniRoma2.it/CPAN/
ftp://ftp.edisontel.it/pub/CPAN_Mirror/
http://cpan.flashnet.it/
ftp://ftp.flashnet.it/pub/CPAN/
http://kvin.lv/pub/CPAN/
ftp://ftp.unix.lt/pub/CPAN/
ftp://download.xs4all.nl/pub/mirror/CPAN/
ftp://ftp.nl.uu.net/pub/CPAN/
ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
http://cpan.cybercomm.nl/
ftp://mirror.cybercomm.nl/pub/CPAN
ftp://mirror.vuurwerk.nl/pub/CPAN/
ftp://ftp.cpan.nl/pub/CPAN/
http://ftp.easynet.nl/mirror/CPAN
ftp://ftp.easynet.nl/mirror/CPAN
http://archive.cs.uu.nl/mirror/CPAN/
ftp://ftp.cs.uu.nl/mirror/CPAN/
ftp://ftp.uninett.no/pub/languages/perl/CPAN
ftp://ftp.uit.no/pub/languages/perl/cpan/
ftp://ftp.mega.net.pl/CPAN
ftp://ftp.man.torun.pl/pub/doc/CPAN/
ftp://sunsite.icm.edu.pl/pub/CPAN/
ftp://ftp.ua.pt/pub/CPAN/
ftp://perl.di.uminho.pt/pub/CPAN/
http://cpan.dei.uc.pt/
ftp://ftp.dei.uc.pt/pub/CPAN
ftp://ftp.nfsi.pt/pub/CPAN
http://ftp.linux.pt/pub/mirrors/CPAN
ftp://ftp.linux.pt/pub/mirrors/CPAN
http://cpan.ip.pt/
ftp://cpan.ip.pt/pub/cpan/
http://cpan.telepac.pt/
ftp://ftp.telepac.pt/pub/cpan/
ftp://ftp.bio-net.ro/pub/CPAN
ftp://ftp.kappa.ro/pub/mirrors/ftp.perl.org/pub/CPAN/
ftp://ftp.lug.ro/CPAN
ftp://ftp.roedu.net/pub/CPAN/
ftp://ftp.dntis.ro/pub/cpan/
ftp://ftp.iasi.roedu.net/pub/mirrors/ftp.cpan.org/
http://cpan.ambra.ro/
ftp://ftp.ambra.ro/pub/CPAN
ftp://ftp.dnttm.ro/pub/CPAN/
ftp://ftp.lasting.ro/pub/CPAN
ftp://ftp.timisoara.roedu.net/mirrors/CPAN/
ftp://ftp.chg.ru/pub/lang/perl/CPAN/
http://cpan.rinet.ru/
ftp://cpan.rinet.ru/pub/mirror/CPAN/
ftp://ftp.aha.ru/pub/CPAN/
ftp://ftp.corbina.ru/pub/CPAN/
http://cpan.sai.msu.ru/
ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/
ftp://ftp.cvt.stuba.sk/pub/CPAN/
ftp://ftp.arnes.si/software/perl/CPAN/
http://cpan.imasd.elmundo.es/
ftp://ftp.rediris.es/mirror/CPAN/
ftp://ftp.ri.telefonica-data.net/CPAN
ftp://ftp.etse.urv.es/pub/perl/
http://ftp.du.se/CPAN/
ftp://ftp.du.se/pub/CPAN/
http://mirror.dataphone.se/CPAN
ftp://mirror.dataphone.se/pub/CPAN
ftp://ftp.sunet.se/pub/lang/perl/CPAN/
http://cpan.mirror.solnet.ch/
ftp://ftp.solnet.ch/mirror/CPAN/
ftp://ftp.danyk.ch/CPAN/
ftp://sunsite.cnlab-switch.ch/mirror/CPAN/
http://ftp.ulak.net.tr/perl/CPAN/
ftp://ftp.ulak.net.tr/perl/CPAN
ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/
http://cpan.org.ua/
ftp://cpan.org.ua/
ftp://ftp.perl.org.ua/pub/CPAN/
http://no-more.kiev.ua/CPAN/
ftp://no-more.kiev.ua/pub/CPAN/
http://www.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN
ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
http://cpan.teleglobe.net/
ftp://cpan.teleglobe.net/pub/CPAN
http://cpan.mirror.anlx.net/
ftp://ftp.mirror.anlx.net/CPAN/
http://cpan.etla.org/
ftp://cpan.etla.org/pub/CPAN
ftp://ftp.demon.co.uk/pub/CPAN/
http://cpan.m.flirble.org/
ftp://ftp.flirble.org/pub/languages/perl/CPAN/
ftp://ftp.plig.org/pub/CPAN/
http://cpan.hambule.co.uk/
http://cpan.mirrors.clockerz.net/
ftp://ftp.clockerz.net/pub/CPAN/
ftp://usit.shef.ac.uk/pub/packages/CPAN/
http://cpan.sunsite.ualberta.ca/
ftp://cpan.sunsite.ualberta.ca/pub/CPAN/
http://theoryx5.uwinnipeg.ca/pub/CPAN/
ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
ftp://cpan.chebucto.ns.ca/pub/CPAN/
ftp://ftp.nrc.ca/pub/CPAN/
http://cpan.azc.uam.mx
ftp://cpan.azc.uam.mx/mirrors/CPAN
http://www.cpan.unam.mx/
ftp://ftp.unam.mx/pub/CPAN
http://www.msg.com.mx/CPAN/
ftp://ftp.msg.com.mx/pub/CPAN/
http://mirror.hiwaay.net/CPAN/
ftp://mirror.hiwaay.net/CPAN/
http://cpan.develooper.com/
http://www.cpan.org/
ftp://cpan.valueclick.com/pub/CPAN/
http://www.mednor.net/ftp/pub/mirrors/CPAN/
ftp://ftp.mednor.net/pub/mirrors/CPAN/
http://mirrors.gossamer-threads.com/CPAN
ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
http://mirrors.kernel.org/cpan/
ftp://mirrors.kernel.org/pub/CPAN
http://cpan-sj.viaverio.com/
ftp://cpan-sj.viaverio.com/pub/CPAN/
http://cpan.digisle.net/
ftp://cpan.digisle.net/pub/CPAN
http://www.perl.com/CPAN/
http://www.uberlan.net/CPAN
ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
http://cpan.four10.com
http://ftp.lug.udel.edu/pub/CPAN
ftp://ftp.lug.udel.edu/pub/CPAN
ftp://ftp.dc.aleron.net/pub/CPAN/
ftp://ftp.cise.ufl.edu/pub/mirrors/CPAN/
http://mirror.csit.fsu.edu/pub/CPAN/
ftp://mirror.csit.fsu.edu/pub/CPAN/
http://cpan.mirrors.nks.net/
ftp://ftp.uwsg.iu.edu/pub/perl/CPAN/
http://cpan.netnitco.net/
ftp://cpan.netnitco.net/pub/mirrors/CPAN/
http://archive.progeny.com/CPAN/
ftp://archive.progeny.com/CPAN/
http://fx.saintjoe.edu/pub/CPAN
ftp://ftp.saintjoe.edu/pub/CPAN
http://csociety-ftp.ecn.purdue.edu/pub/CPAN
ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN
http://cpan.uky.edu/
ftp://cpan.uky.edu/pub/CPAN/
http://slugsite.louisville.edu/cpan
ftp://slugsite.louisville.edu/CPAN
http://mirrors.towardex.com/CPAN
ftp://mirrors.towardex.com/pub/CPAN
ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
ftp://cpan.cse.msu.edu/
http://cpan.calvin.edu/pub/CPAN
ftp://cpan.calvin.edu/pub/CPAN
http://www.oss.redundant.com/pub/CPAN
ftp://www.oss.redundant.com/pub/CPAN
http://ftp.cpanel.net/pub/CPAN/
ftp://ftp.cpanel.net/pub/CPAN/
http://cpan.teleglobe.net/
ftp://cpan.teleglobe.net/pub/CPAN
http://cpan.belfry.net/
http://cpan.erlbaum.net/
ftp://cpan.erlbaum.net/
http://cpan.thepirtgroup.com/
ftp://cpan.thepirtgroup.com/
ftp://ftp.stealth.net/pub/CPAN/
http://www.rge.com/pub/languages/perl/
ftp://ftp.rge.com/pub/languages/perl/
http://www.ibiblio.org/pub/languages/perl/CPAN
ftp://ftp.ibiblio.org/pub/languages/perl/CPAN
ftp://ftp.duke.edu/pub/perl/
ftp://ftp.ncsu.edu/pub/mirror/CPAN/
ftp://ftp.ou.edu/mirrors/CPAN/
ftp://ftp.orst.edu/pub/CPAN
http://ftp.epix.net/CPAN/
ftp://ftp.epix.net/pub/languages/perl/
http://mirrors.phenominet.com/pub/CPAN/
ftp://mirrors.phenominet.com/pub/CPAN/
http://cpan.pair.com/
ftp://cpan.pair.com/pub/CPAN/
ftp://carroll.cac.psu.edu/pub/CPAN/
ftp://ftp.sunsite.utk.edu/pub/CPAN/
http://ftp.sedl.org/pub/mirrors/CPAN/
http://www.binarycode.org/cpan
ftp://mirror.telentente.com/pub/CPAN
http://mirrors.theonlinerecordstore.com/CPAN
ftp://mirror.xmission.com/CPAN/
http://cpan-du.viaverio.com/
ftp://cpan-du.viaverio.com/pub/CPAN/
http://mirrors.rcn.net/pub/lang/CPAN/
ftp://mirrors.rcn.net/pub/lang/CPAN/
http://perl.secsup.org/
ftp://perl.secsup.org/pub/perl/
http://noc.cvaix.com/mirrors/CPAN/
http://cpan.llarian.net/
ftp://cpan.llarian.net/pub/CPAN/
http://cpan.mirrorcentral.com/
ftp://ftp.mirrorcentral.com/pub/CPAN/
ftp://ftp-mirror.internap.com/pub/CPAN/
http://mirror.sit.wisc.edu/pub/CPAN/
ftp://mirror.sit.wisc.edu/pub/CPAN/
http://mirror.aphix.com/CPAN
ftp://mirror.aphix.com/pub/CPAN
http://ftp.planetmirror.com/pub/CPAN/
ftp://ftp.planetmirror.com/pub/CPAN/
ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
ftp://cpan.topend.com.au/pub/CPAN/
http://cpan.mirrors.ilisys.com.au
ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
http://aniani.ifa.hawaii.edu/CPAN/
ftp://aniani.ifa.hawaii.edu/CPAN/
ftp://mirrors.bannerlandia.com.ar/mirrors/CPAN/
http://www.linux.org.ar/mirrors/cpan
ftp://ftp.linux.org.ar/mirrors/cpan
ftp://cpan.pop-mg.com.br/pub/CPAN/
ftp://ftp.matrix.com.br/pub/perl/CPAN/
http://cpan.hostsul.com.br/
ftp://cpan.hostsul.com.br/
http://cpan.netglobalis.net/
ftp://cpan.netglobalis.net/pub/CPAN/
www.linux.org.ar::cpan
theoryx5.uwinnipeg.ca::CPAN
ftp.shellhung.org::CPAN
rsync.nic.funet.fi::CPAN
ftp.u-paris10.fr::CPAN
mir1.ovh.net::CPAN
rsync://ftp.crihan.fr::CPAN
ftp.gwdg.de::FTP/languages/perl/CPAN/
ftp.leo.org::CPAN
ftp.cbn.net.id::CPAN
rsync://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
ftp.iglu.org.il::CPAN
gusp.dyndns.org::cpan
ftp.kddlabs.co.jp::cpan
ftp.ayamura.org::pub/CPAN/
mirror.leafbug.org::CPAN
rsync.en.com.sg::CPAN
mirror.averse.net::cpan
rsync.oss.eznetsols.org
ftp.kr.FreeBSD.org::CPAN
ftp.solnet.ch::CPAN
cpan.cdpa.nsysu.edu.tw::CPAN
cpan.teleglobe.net::CPAN
rsync://rsync.mirror.anlx.net::CPAN
ftp.sedl.org::cpan
ibiblio.org::CPAN
cpan-du.viaverio.com::CPAN
aniani.ifa.hawaii.edu::CPAN
archive.progeny.com::CPAN
rsync://slugsite.louisville.edu::CPAN
mirror.aphix.com::CPAN
cpan.teleglobe.net::CPAN
ftp.lug.udel.edu::cpan
mirrors.kernel.org::mirrors/CPAN
mirrors.phenominet.com::CPAN
cpan.pair.com::CPAN
cpan-sj.viaverio.com::CPAN
mirror.csit.fsu.edu::CPAN
csociety-ftp.ecn.purdue.edu::CPAN
最新の CPAN サイトリストは、 http://www.cpan.org/SITES や ftp://www.cpan.org/SITES を 参照してください。
(以下のセクションは、Tim Bunce のモジュールファイルからそのまま 借りてきたものです。 このモジュールファイルは直近の CPAN サイトで入手可能です。)
Perl はパッケージを使ったクラスを実装していますが、パッケージの存在が クラスの存在を意味するということではありません。 パッケージとは単なる名前空間です。 クラスはメソッドとして使うことのできるサブルーチンを持っている パッケージです。 メソッドとは、その最初の引数としてパッケージの名前("static" メソッドの場合)か 何かのリファレンス("virtual"メソッドの場合)をとるサブルーチンです。
モジュールとは、(規則では) ファイルと同じ(ただし.pmはない)名前の クラスと、それに加えて export されたシンボルをフェッチするために 呼び出すことができるようなクラスにあるimport メソッドを提供するものです。 このモジュールは C や C++ オブジェクトから動的にロードされる メソッドを実装することもできますが、モジュールのユーザーに対して 総合的には透過であるべきです。 同様に、モジュールはオンデマンドでサブルーチン定義を slurp するような AUTOLOAD 関数をセットアップすることもできますが、これもまた透過であるべきです。 .pm ファイルだけが存在することを要求されます。 AUTOLOAD 機構に関する詳細は perlsub, perltoot, AutoLoader を 参照してください。
似たようなモジュールが既にありませんか?
もしあれば、そのモジュール全体を使うか、新たなクラスに便利な機能を 継承して、再利用することを試みてください。 もしそれが現実的でないのなら、モジュールの拡張やすでにあるモジュールの 機能の拡張を、モジュールの作者と一緒に行うことを試みてください。 完全な例は、perl4 にあるコマンドラインオプションを取り扱うための パッケージです。
もしあなたが既に存在しているモジュールのセットを拡張するモジュールを 書こうと言うのであれば、パッケージの作者と調整してください。 あなたが元の作者と同様の命名規則やモジュール相互作用規則に従うのならば、 それが助けになります。
新しいモジュールを、拡張や再利用しやすいようにデザインすることを 試みてください。
use warnings;
(または use warnings qw(...);
) を試みてください。 たくさんの警告がいらないコードブロックに対しては no warnings qw(...);
を追加できることも忘れないでください。
bless されたリファレンスを使いましょう。 コンストラクタの第一引数として渡されたクラス名に bless するために、 二引数をとる bless を使いましょう。
sub new {
my $class = shift;
return bless {}, $class;
}
あるいは、静的メソッドと仮想メソッドのいずれとしても使いたいので あればこうしましょう。
sub new {
my $self = shift;
my $class = ref($self) || $self;
return bless {}, $class;
}
リファレンスとして配列を渡すので、より多くのパラメータを後で追加することが 可能です(そしてこのやり方は高速でもあります)。 関数を適切なメソッドへと変換します。 大きなメソッドを小さく、より柔軟なものに分割します。 適切であれば、他のモジュールからメソッドを継承します。
die "Invalid" unless ref $ref eq 'FOO'
のようなクラス名の検査は しないようにしましょう。 一般的に、ほとんど何の障害もなしに eq 'FOO'
の部分を削除できます。 クラス名を直接表記することはできる限り避けるようにしましょう。
@ISA=qw(... Class ...)
や $r->func()
が使えるところでは $r->Class::func()
を使うのは避けましょう (詳しくは perlbot を参照してください)。
自動 split を使うことはあまりなく、新たに追加した関数がそれを使わない プログラムに負担を掛けることはありません。 モジュールの __END__ の後にテスト関数を追加して AutoSplit を使うか 以下のようにします:
eval join('',<main::DATA>) || die $@ unless caller();
あなたのモジュールは 'empty subclass' テストを通過しますか? @SUBCLASS::ISA = qw(YOURCLASS);
といったことをしているのなら、 あなたのアプリケーションは YOURCLASS と全く同じ方法で SUBCLASS を 使えるようにすべきです。 たとえば、$obj = YOURCLASS->new();
を $obj = SUBCLASS->new();
へと変更してもあなたのアプリケーションは 動作しますか?
パッケージ中でなんらかのステート情報を保持しつづけることは避けましょう。 なぜなら、それによってあなたのパッケージを他の複数のパッケージが 使うことが難しくなるからです。 ステート情報はオブジェクトに置くようにしましょう。
いつでも -w を使いましょう。
use strict;
(もしくは use strict qw(...);
) を試しましょう。 厳密さが余り必要でない独立したブロックには no strict qw(...);
を 付加できるということを忘れないでください。
いつでも -w を使いましょう。
マニュアルページ perlstyle(1) にあるガイドラインに従って下さい。
いつでも -w を使いましょう。
幾つかの単純なスタイルガイドライン
Perl と一緒に提供されている perlstyle マニュアルには、多くの助けに なることが書かれています。
コーディングスタイルとは、個々人の好みの問題です。 多くの人々は自分自身のスタイルを、自分自身でプログラムを書いたり 良く書かれているプログラムを保守することを通じて学び、何年もかけて 改良しています。 以下に経験を積んだ開発者によって広く使われている提案の集まりを 示します。
語を区切るのにアンダースコアを使いましょう。 一般的に言って $var_names_like_this は $VarNamesLikeThis よりも読みやすく、 特に英語を母国語にしていない人にとってはそうです。 これはまた、VAR_NAMES_LIKE_THIS のように一貫して機能する 単純なルールでもあります。
パッケージやモジュールの名前はこの規則の例外です。 Perl は非公式にですが、小文字だけからなるモジュール名を integer や strict のような「プラグマ」モジュールのために予約しています。 そのほかのモジュールは大文字で始まって、アンダースコアを使わない大小文字の 並びを使います(短く、可搬性があるようにする必要があります)。
大小文字の区別を、変数の性質だとかスコープを示すために便利に使えることに 気がついたかもしれません。 例えば:
$ALL_CAPS_HERE 定数のみ(Perl の変数とぶつからないか注意)
$Some_Caps_Here パッケージを通じてのグローバル/スタティック
$no_caps_here my() や local() で宣言された関数スコープの変数
関数名やメソッド名は $obj->as_string()
のようにすべて小文字に することが最善でしょう。
先頭のアンダースコアを、変数や関数をそれが定義されているパッケージの 外側では使うべきではないということを示すために 使うことができます。
エクスポートするものを選びましょう。
メソッド名をエクスポートしては いけません!
ちゃんとした理由なしに、何かをデフォルトでエクスポートするような ことはしては いけません!
エクスポートはモジュールのユーザーの名前空間を汚染します。 エクスポートしなければならないのであれば、@EXPORT よりは むしろ @EXPORT_OK を使い、短い名前や一般的な名前がぶつかるリスクを 軽減します。
一般的には、エクスポートされていないものもモジュールの外側から アクセスすることが ModuleName::item_name (もしくは $blessed_ref->method
) 構文を使うことで可能です。 慣例により、あなたは名前の先頭にあるアンダースコアをその名前が 「内部的」なものであって、パブリックな用途のためのものではないことを 非公式に示すのに使えます。
(プライベートな関数は my $subref = sub { ... }; &$subref;
の ようにして得ることが実際には可能です。 しかし、メソッドとして直接呼び出す方法はありません。 なぜなら、メソッドはシンボルテーブルの中で名前を 持っていなければならないからです。)
一般的な規則として、モジュールがオブジェクト指向であろうとするなら、 なにもエクスポートしません。 モジュールが単に関数の集合であるなら、警告付きで @EXPORT を 使うのではなく、すべて @EXPORT_OK を使います。
モジュールのための名前を選択しましょう。
この名前は、可能な限り説明的で、厳密な、完全なものであるべきです。 曖昧さのリスクを避けましょう。 常に二つ以上の単語を使うことを考えましょう。 一般的には、名前はそのモジュールがどのようにしているかではなく、 何をしているかという特性を反映したものであるべきです。 ネストしたモジュールを、グループに非公式な名前を付けたりモジュールを 分類するために使ってください。 ネストした名前を持たないモジュールは、そのためのきちんとした 理由を持つべきです。 モジュール名は大文字で始まるべきです。
Sort と呼ばれる 57 のモジュールをすべて持つことは、簡単なことでは ありません(Sort::Quick と呼ばれる 23 についてのみ考えることが より想像しやすいでしょう :-)。 誰かがあなたのモジュールを他の多くのモジュールと一緒に インストールすることを想像してください。 なにか疑問があれば comp.lang.perl.misc で提案してみてください。
関連したモジュール/クラスの一揃えを開発するのであれば、それは名前空間を 破壊することを防ぐような一般的なプリフィックスを持つネストした クラスを使うよい練習になるでしょう。 たとえば Xyz::Control, Xyz::View, Xyz::Model といったものです。 命名ガイドとしてこのリストにあるモジュールを使ってください。
ある集合に新しいモジュールを追加するのなら、元の作者の標準に従った モジュールのネーミングやメソッドのインターフェースを使ってください。
もしプライベートな内部やプロジェクト固有の用途のために開発中のモジュールが 決して公開されることがないなら、将来の公開モジュールと名前が 衝突しないことを確実にしてください。 これは、予約済みの Local::* カテゴリを使うか、 Foo_Corp::* のように 名前にした戦を含めることで行えます。
モジュールの各コンポーネントを可搬性あるものにするために、名前は 11 文字以下に制限すべきでしょう。 MS-DOS 上で使われる可能性のあるものであれば、各コンポーネントが 最初の 8 文字で区別できるようにしてください。 ネストモジュールはこれを簡単にしてくれます。
正しくやりましたか?
あなたが正しい判断をしたと、どのように知りますか? 後で問題を引き起こすようなインターフェースデザインを取り除きましたか? 最も適切な名前を選択しましたか? なにか質問はありませんか?
確実に知る方法、そして多くの助けになる提案をとりあげる最善の方法とは、 その方法を知っている人に訊くということです。 comp.lang.perl.misc はモジュールを開発した人全てが読んでいて、 尋ねる場所には最も良い場所です。
あなたがする必要があるのは、モジュールの手短な要約、その目的と インターフェースを投稿することです。 主なメソッドのそれぞれについて二、三行あれば十分でしょう (あなたがモジュール全体を投稿したら、忙しい人 - つまりあなたが 一番読んで欲しい人達は無視してしまうかもしれません!)
モジュールがいつ完成するか言えなくても投稿することを 恐がることはありません。 メッセージの中でそう言えば良いのです。 誰かがあなたを助けて、完成できるようにしてくれるかもしれないのです!
README とその他の付加的なファイル。
ソフトウェアの開発者は、通常自分が作ったソフトウェアの完全な ドキュメントを作成します。 しかし、世界があなたのソフトウェアすぐにでも必要にして、ドキュメントを 作成するのに十分な時間が無かったとしても、最低限 README ファイルを 含めるようにしてください。
モジュール/パッケージ/拡張などの記述。
著作権表記 - 後述します。
前提条件 - 必要になるようなこと、もの。
ビルドの方法 - 可能な Makefile.PL などの変更。
インストールの仕方。
今回のリリースであった変更点、特に非互換なもの
あなたが将来に向けて考えている変更や拡張。
README ファイルが非常に大きくなりそうなら、それを INSTALL, Copying, ToDo などのセクションごとのファイルに分割したいと考えるかもしれません。
著作権表記の追加。
あなたの成果にどのようにライセンスを選択するかは個人的な決定事項です。 一般的な仕組みは、あなたの著作権を表明し、あなたの成果をどのように 他人がコピーしたり、使ったり、変更したりできるかを宣言するものです。
たとえば Perl では、二種類のライセンスを提供しています: GNU GPL と Artistic Licence (README、Copying、Artistic といったファイルや perlgpl と perlartistic を参照してください)がそれです。 Larry は単に GNU GPL だけを使わないちゃんとした理由を持っています。
Larry や Perl、Perl コミュニティに対する尊重を外しての私の個人的な お勧めは、以下の様な単純な文章です。
Copyright (c) 1995 Your Name. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
この文言が少なくとも README ファイルになければなりません。 これを、Copying というファイルやソースファイルに含めることもできます。 著作権に付け加える他の言葉を忘れないでください。
モジュールに version/issue/release 番号を付ける。
Exporter や MakeMaker モジュールに対する完全な互換性を持つために、 あなたは自分のモジュールのバージョン番号を、my ではないパッケージ変数 $VERSION に格納すべきです。 これは小数点の後に少なくとも二桁の数字を持った浮動小数点で あるべきものです(例: $VERSION = "0.01"
)。 "1.3.2" という形式のバージョンは使ってはいけません。 詳しくは、Exporter を参照してください。
番号を取得するための関数やメソッドを追加するのが良いでしょう。 この番号を、アナウンスとモジュールをリリースするときのアーカイブ ファイル名 (ModuleName-1.02.tar.Z) に使います。 詳しくは ExtUtils::MakeMaker.pm を参照してください。
モジュールのリリースと配布の仕方。
あなたの作ったモジュールが使えるということのアナウンス(モジュールが 小さければモジュールそれ自身)を Usenet ニューズグループの comp.lang.perl.announce に投稿することは良い考えです。 これは、少なくとも広い範囲に渡る配布を保証するでしょう。
可能であれば、モジュールを CPAN に登録しましょう。 その場所の詳細をあなたのアナウンスに含めるべきでしょう。
ftp アーカイブについて注意すべき幾つかのこと: バージョン番号を含んだ 長い説明的な名前を使ってください。 ほとんどの incoming ディレクトリは readable/listable になってはいないので、 あなたはアップロードした後でそのファイルを見ることができないでしょう。 アップロードしたら、できるだけ早く email による通知を送ることを 忘れないでください。 そうしなければあなたのファイルは自動的に削除されてしまうかもしれません。 ファイルの場所をアナウンスする前に、あなたのファイルが 処理されたりチェックされるのに時間が掛かることを考慮してください。
Perl モジュールのための FTP アーカイブ:
手順に従って以下へリンクします:
http://www.cpan.org/modules/00modlist.long.html
http://www.cpan.org/modules/04pause.html
あるいは以下のサイトのいずれかにアップロードします:
https://pause.kbx.de/pause/
http://pause.perl.org/pause/
そして <modules@perl.org> に通知します。
WWW インターフェースを使うことによって、あなたのモジュールをあなたの ftp サイトや WWW サイトから CPAN のあなたのディレクトリへ ミラーリングできるかアップロードサーバーに尋ねることができます!
モジュールリストの更新されたエントリーを私に知らせることを 忘れないでください!
リリースされたモジュールを変更するときには注意すること。
常に以前にリリースしたバージョンとの互換性を保つように努力すること。 あるいは、ユーザーが古い振る舞いに頼っているのであれば、 そういった振る舞いを行うような機構を追加すること。 非互換な修正をドキュメント化すること。
すべてを変換する必要はありません。
もし不具合がないのなら、修正してはいけません! Perl 4 のライブラリにあったスクリプトは問題なしに動作するはずなのです。 幾つかのちょっとした変更(ダブルクォーテーションに囲まれた文字列中の、 配列を示すものではない @ をエスケープするとか)を行う必要があるかも しれませんが、.pl ファイルをモジュールへと変換する必要性はありません。
連携を考慮しましょう。
そのスクリプトを使っている Perl アプリケーションのすべては、 スクリプトがモジュールへと変更されたならばアプリケーションも変更する 必要があるでしょう。 他の変更を同時に行うことをあなたが考えていないのなら、 それは価値あることでしょうか?
多くの機会を得よう。
スクリプトをモジュールに変換しようというのであれば、あなたはそれを インターフェースの再デザインの機会として使うことができます。 上述した Guidelines for Module Creation にはあなたが考慮すべき事柄の 多くが含まれています。
まず pl2pm ユーティリティから始めましょう。
このユーティリティは *.pl ファイル(引数として与えます)を読み込み、 それに対応する *.pm ファイルを出力します。 pl2pm ユーティリティは以下のことを行います。
標準的なモジュールプロローグ行の付加
パッケージ指定子の ' から :: への変更
die(...) から croak() への変更
幾つかのちょっとした変更
pl2pm の機械的な処理は完全ではありません。 変換されたコードは、特にパッケージ文についてよくチェックしておく必要が あるでしょう。 新しい .pm がきちんと動くようになるまでは、元の .pl ファイルを 削除してはいけません!
完全なアプリケーションはほとんど Perl モジュールライブラリに 属していません。
多くのアプリケーションは幾つかの再利用可能な Perl コードを 含んでいます。
世界を救うことに協力しましょう! あなたのプログラムを再利用が簡単なようにする形式で共有しましょう。
再利用可能なプログラムを独立したモジュールファイルに分けます。
インターフェースの再検討と再設計の機会を持ちましょう。
一部の“アプリケーション”は、 再利用可能なモジュールのトップにある
小さなコード片に縮小することができます。 この場合、アプリケーションは以下の様に起動することが可能です。
% perl -e 'use Module::Name; method(@ARGV)' ...
あるいは
% perl -mModule::Name ... (in perl5.002 or higher)
C++、Ada、Modula-17 といった他の言語のようにモジュールの一部分を private にするとか、public にするといったことを Perl は 強制するようなことはありません。 Perl はプライバシーを強制することに夢中になることはしません。 あなたがリビングルームの外に留まっているのはあなたが 招待されていないからで、 ショットガンを持っているからではないからです。
モジュールとそのユーザーは不文律の一部として、契約を交わしています。 そして、その一部は「書かれて」います。 不文律契約の一部としては、モジュールが、委譲されていない名前空間を 汚染しないことです。 モジュールのために書かれた契約(ドキュメント)は、異なる規約を 作ることが可能です。 しかしその後、あなたが世界を再定義 (redefining the world) する use RedefineTheWorld
を使ったときにそれによって起こる結果を 享受することを知ることになるでしょう。