続・はじめてのPerl 3章
今日もまとめ
3章 モジュールの使い方
3.1 標準ディストリビューション
ポピュラーなモジュールは、すでにPerlに付属されている 5.003_07 98個 5.8.8 359個 これらを「コアモジュール」または、「標準ディストリビューション」と表す Module::CoreListを使い、コアモジュール数を数えることが出来る
3.2モジュールの使い方
モジュールにはドキュメントが付属されている perldocコマンドで、モジュールのドキュメントを閲覧出来る perldoc File::Basename ドキュメントは、UNIXのman形式 NAMEセクションと、SYNOPSISセクションから始まる SYNOPSIS = 概要 モジュールの使用例を示す モジュールのインターフェイスは様々な形がある モジュールによって使い方は少しずつ異なる
3.3 関数インターフェイス
モジュールの読み込み useディレクティブを使う → 10章、15章で詳しく説明 use File::Basename; ロードすると、3つのサブルーチンがインポートされる fileparse basename dirname すでに、dirnameサブルーチンが実装されていた場合 File::Basenameが実装しているdirnameで上書きされる 警告を有効にしていれば、警告が表示される
3.4 インポートする関数を選ぶには
インポートリスト インポートされるサブルーチンを制限する useディレクティブを使用するときに、 モジュール名の後に読み込むサブルーチン名リストを付ける use File::Basename qw( fileparse basename ); fileparseとbasenameがインポートされる dirnameはインポートされない use File::Basename ( 'fileparse', 'basename' ); でも同じ メンテナンス性が落ちるので、qw()を使い指定するのがベター インポートしなかったサブルーチンを使うには? 完全なパッケージ名と共に指定する my $dirname = File::Basename::dirname( $path ); インポートリストで指定したサブルーチンに対しても同様に使える my $basename = File::Basename::basename( $path ); 空のインポートリスト use File::Basename qw( ); 何もインポートされない qw()を付けない場合は、「デフォルトを下さい」という意味
3.5 オブジェクト指向インターフェイス
File::Specモジュール オブジェクト指向インターフェイスを持つ サブルーチンはインポートされない File::Specクラスのクラスメソッドcatfileを呼び出すコードサンプル my $filespec = File::Spec->catfile( $homedir{gilligan}, 'web_docs', 'photos', 'USS_Minnow.gif', ); このモジュールは、移植性の高い形でファイルパスを操作するメソッドを提供する → 移植性に関しては、perlportドキュメント参照
3.6 より典型的なオブジェクト指向モジュール : Math::BigInt
File::Specモジュールは、オブジェクトを持っていない オブジェクト指向言語には見えない Math::BigInt Perlネイティブで扱えるものより大きい整数を処理できる
# モジュールは何もインポートしない use Math::BigInt; # newはクラスメソッド # クラス名から、新しいインスタンス生成 my $value = Math::BigInt->new( 2 ); # 初期値2 # bpowとbstrはインスタンスメソッド # インスタンスのデータ操作を行う $value->bpow( 1000 ); # 2**1000 print $value->bstr(), "\n"; # 表示
3.7 CPAN
CPAN Comprehensie Perl Archive Network : 総合Perlアーカイブネットワーク CPAN Search(http://search.cpan.org/) で出来ること ・モジュールの検索 ・ドキュメントの閲覧 ・ディストリビューションの閲覧 ・CPANテスタレポートの閲覧 ・など!
3.8 CPANのモジュールをインストールするには
インストール手順 ダウンロードし、解凍して、そのディレクトリに移動 $ wget http://www.cpan.org/.../HTTP-Cookies-Safari-1.10.tar.gz $ tar -xzf HTTP-Cookies-Safari-1.10.tar.gz $ cd HTTP-Cookies-Safari-1.10s Makefile.PLを使いインストール $ perl Makefile.PL $ make $ make test $ make install システム全体のディレクトリにインストールされる インストールされるディレクトリは、Perl -V で確認可能 このディレクトリは、管理者がPerlをインストールするときに設定される インストールする権限がない場合 PREFIX引数を使い、別のパスにインストールすることが可能 $ perl Makefile.PL PREFIX=/home/tyamaguc07/perl/lib Build.PLを使いインストール $ perl Build.PL $ perl Build $ perl Build test $ perl Build install Build.PLがある場合、コードのビルドとインストールに、Module::Buildを使用している Module::Buildは Perl 5.9.4 からコアモジュール $ corelist -a Module::Build それ以前のバージョンでは、ディストリビューションのインストールのために、 Module::Buildをインストールする必要がある インストールディレクトリを指定するには、--install_base パラメータを指定する $ perl Build.PL --install_base /home/tyamaguc07/perl/lib ディストリビューションによっては、Makefile.PL Build.PL 両方用意されている 好きな方を使っていい 環境変数 PERL5LIB 指定したディレクトリを、モジュールディレクトリサーチリストに加える $ export PERL5LIB=/home/tyamaguc07/perl/lib libプラグマ モジュールサーチパスを追加する #!/user/bin/perl use lib qw( /home/tyamaguc07/perl/lib ); 問題点 ・コードを書き換える必要がある ・別のマシンで、モジュールが同じディレクトリにあるとは限らない
3.9 適切なタイミングでパスを設定するには
Perlは、特殊変数@INCに含まれるディレクトリからモジュールを探す use文はコンパイル時に実行 したがって、@INCもコンパイル時に参照される @INCにパスを追加する use文がコンパイル時に実行された後、unshiftが実行されるため、 以下の方法では、use文が実行されるタイミングでパスは追加されない unshift @INC, '/home/tyamaguc07/perl/lib'; use MyModule; use文が実行される前に@INCを書き換えるには、BEGINブロックを使用する BEGIN { unshift @INC, '/home/tyamaguc07/perl/lib'; } use MyModule; BIGINブロックは、コンパイル時にコンパイルされ実行される。 BEGINブロックより libプラグマを使うべき use lib qw( /home/tyamaguc07/perl/lib ); use MyModule; libプラグマ ・1つ以上の引数を取り、unshiftと同様に@INCの先頭に追加 ・ほとんどの場合、サイト依存のパス名に対して使用される 変更への対応のしやすさから、ファイルの先頭で使うのが伝統的 ・「このライブラリを使え」ではなく、「このパスを使ってライブラリとモジュールを探せ」 以下のようなコードは間違い use lib qw( /home/tyamaguc07/perl/lib/MyModule.pm ); ・コンパイル時に実行される 以下のようなコードは使えない my $LIB_DIR = '/home/tyamaguc07/perl/lib'; ... use lib $LIB_DIR; use MyModule; このような方法を取りたい場合は… ・BEGINブロックを使い、$LIB_DIRを定義する BEGIN { our $LIB_DIR = '/home/tyamaguc07/perl/lib'; } ... use lib $LIB_DIR; use MyModule; ・use constant を使い、定数の設定を行う use constant LIB_DIR => '/home/tyamaguc07/perl/lib'; ... use lib LIB_DIR; use MyModule;
3.9.1 モジュールの依存関係を処理するには
依存関係の問題 モジュールをインストールのために、別のモジュールがインストールされている必要がある 依存関係がネスト構造になっていることもある CPAN.pm モジュールを使って楽にインストール CPAN.pm Perl5.004以降、標準ディストリビューションに含まれる 対話的なモジュールインストールシェルを提供 指定したモジュールのダウンロード、解凍、ビルド、テスト、インストール 依存関係にあるモジュールについても再帰的に同じことを行う $ perl -MCPAN -e shell cpan> install CGI::Prototype CPANモジュールを使うための仕事は少し多すぎる より簡単に使うために、cpanスクリプトが提供されている インストールしたいモジュールのリストを与えるだけ $ cpan CGI::Prototype HTTP::Cookies CPANPLUS.pm CPAN.pmを完全に書き直した物
感想
ほぼ復習。
でも、分かっていることでも文章に起こそうとすると時間がかかる。
モダンなモジュールのインストール方法は、cpanmを使うことだよね。
- 作者: Randal L. Schwartz,brian d foy,Tom Phoenix,吉川英興,伊藤直也,田中慎司,株式会社ロングテール/長尾高弘
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2006/10/21
- メディア: 大型本
- 購入: 9人 クリック: 389回
- この商品を含むブログ (99件) を見る