!!!CPANって {{category Parl,Unix,nolink}}CPAN (Comprehensive Perl Archive Network) には、再利用性・汎用性の高いモジュールが登録されている。 CPANを利用するには、make (tar, gzipも?)コマンドが使える必要があります。また、モジュールによっては、Cコンパイラも必要になります。UNIXでは、標準でそれらのコマンドが入っている(ことが多い)が、Windowsで利用する場合は、別途それらを用意する必要がある。 幸いにも無償で利用できる Visual C++ Express Edition の cl.exe, nmake.exe が利用できるので、VCをインストールし、コマンドへのパスを通せば利用できる。また、ActivePerl を利用しているなら [[PPM でインストールする方法|ParlModule/PpmInstall]]も試してみる。 !!!CPANシェルの起動 CPANシェルの起動は、シェルから以下のコマンドを実行する。 # perl -MCPAN -e shell または、(最近のものは)パスの通った場所に実行スクリプトが設置される(UNIX:/usr/bin/cpan, Win:%PREL_HOME%\bin\cpan.bat)ので、単純に cpan でも起動する。 # cpan 初回起動の場合、そのまま [[CPANシェルの初期設定|ParlModule/CpanConfig]]が行われる。 そして、CPANシェルから抜ける場合は、'''q''' コマンドでシェルに戻ります。 cpan> q CPANシェルのヘルプを読むには、h, ? コマンドを実行。 cpan> ? モジュールをインストールする際にシステムにインストールするため、スーパーユーザになって==行うか、sudo を使用して== CPANシェル を起動します。 ※sudo を使って実行し、実行したユーザでCPANの設定が行われている場合、その設定が優先されるっぽい…。 !!!モジュールのインストール install コマンドでインストールするモジュールを指定する。依存関係がある物は必要に応じてインストール(問い合わせ)される。 cpan> install Digest::SHA1 最後に「 /usr/bin/make install -- OK」といったメッセージが表示されれば成功。 途中で失敗した場合は、診断メッセージが出力されているので修正をして再度インストールを行う。 !!シェルからワンライナーでモジュールをインストール 以下のようにシェルからのワンライナーでインストールも出来る。 # perl -MCPAN -e 'CPAN::Shell->install("Digest::CRC")' !!シェルから cpan コマンドでモジュールをインストール cpan コマンドが利用できる場合、引数にモジュール名を指定することでインストールも出来る。(-i オプションを指定しなくてもOKっぽい) # cpan -i Digest::SHA1 !!!モジュールのアップデート バージョンアップされたモジュールのレポート(一覧)を表示する。モジュール名か、パターンを指定すればマッチするものが対象となる。 cpan> r Package namespace installed latest in CPAN file Errno 1.09_00 1.10 GBARR/Errno-1.10.tar.gz  : (中略) 114 installed modules have no parseable version number レポートの中からアップデートが必要なものは、install コマンドでアップデート(インストール)を行う。 また、upgrade コマンドもある。バージョンのチェックとアップデート処理が行われる。 !!ワンライナーで処理 ワンライナーからもレポート表示を呼び出せる。 # perl -MCPAN -e "CPAN::Shell->r" install と r を組み合わせて一括更新する。アップデート一覧が表示され、次に各モジュールが最新版に更新(インストール)される。 # perl -MCPAN -e "CPAN::Shell->install(CPAN::Shell->r)" !!最新のCPANモジュールの更新 CPANシェル自体も各種モジュールを利用してる。CPANのモジュール名「Bundle::CPAN」を指定してそれらを最新の状態に更新する。 cpan> install Bundle::CPAN !!プライベートなbundel定義ファイル autobundle コマンドを実行することで、インストールされたモジュールのリスト(スナップショット)を作成できる。このスナップショットは、そのまま同じあるいは別のマシンに再インストールできるフォーマットで出力される。 cpan> autobundle CPAN: Storable loaded ok Going to read /root/.cpan/Metadata Database was generated on Mon, 05 Feb 2007 01:26:44 GMT  : (中略) Package namespace installed latest in CPAN file AnyDBM_File 1.00 1.00 NWCLARK/perl-5.8.8.tar.gz  : (中略) warnings 1.03 1.05 NWCLARK/perl-5.8.8.tar.gz warnings::register 1.00 1.01 NWCLARK/perl-5.8.8.tar.gz Wrote bundle file /root/.cpan/Bundle/Snapshot_2007_02_06_00.pm cpan> 再インストールするときは、以下のようにinstallコマンドを実行する。別のマシンで行う場合は、作成したスナップショットファイルをビルドディレクトリの Bundle の中に入れる。 cpan> install Bundle::Snapshot_2007_02_06_00 !!!一般ユーザでのモジュールの追加・利用 レンタルサーバなどで管理者ユーザが利用できない場合、一般ユーザでのモジュールの追加とそのモジュールの利用する手順など !!ライブラリの展開先を指定する 'perl Makefile.PL' のオプション指定 makepl_arg で展開先を指定する。例えば、ホームディレクトリの perl ディレクトリに展開する場合、PREFIX=~/perl を指定する。 cpan> o conf makepl_arg "PREFIX=~/perl/lib" cpan> o conf commit !!モジュールの利用(環境変数で追加) コマンドラインまたは設定ファイルで、PERL5LIB という環境変数でモジュールのディレクトリをコンマで区切って追加する。perl はライブラリファイルを探すときに、標準のライブラリディレクトリとカレントディレクトリよりも先に PERL5LIB を探しに行く。 また、一般ユーザでインストールしたモジュールに依存するモジュールをインストールする場合は、この設定を行っておく必要がある。 ・tcsh(csh)の場合 setenv PERL5LIB ~/perl/libdata/perl5:~/perl/libdata/perl5/site_perl ・bash(sh)の場合 export PERL5LIB=~/perl/libdata/perl5:~/perl/libdata/perl5/site_perl !!モジュールの利用(ソースに追加) ソースの最初(use module で読む前)に、'''use lib''' を使って検索パス(@INC)の最初に追加する。 cgi などで動かす場合、環境変数での指定ができないので、直接ソースに記述する。 #!/usr/bin/perl use lib '/home/hogehoge/perl/libdata/perl5'; use lib '/home/hogehoge/perl/libdata/perl5/site_perl'; use Template; !!!NAT, PROXY 環境下での利用 ネットワーク接続の関係で設定が必要なもの !!passive FTP に設定 CPAN上で動く LWP や Net::FTP をパッシブモードで動かす場合、環境変数 FTP_PASSIVE に '''1''' を設定する。 CPANの起動時に設定する場合、以下のように起動する。 # perl -MCPAN -e '$ENV{FTP_PASSIVE} = 1; shell' 最近のバージョン(1.8802 で確認)は、CPANシェルの設定にパッシブモードの設定があるので、設定しておけば環境変数の設定は不要。 cpan> o conf ftp_passive 1 外部アプリケーションを利用する場合は、それぞれのアプリケーションのパッシブモードの設定に従う。 !!プロキシの対応 HTTPやFTPでプロキシを使う必要がある場合は、CPANシェルの設定に必要な情報を設定する。 cpan> o conf ftp_proxy 'proxy.example.com' cpan> o conf http_proxy 'http://proxy.example.com:8080' cpan> o conf no_proxy 'www.example.com' また、プロキシ認証がある場合は、ユーザ名とパスワードの設定も行う。 cpan> o conf proxy_user 'username' cpan> o conf proxy_pass 'password' 環境変数 FTP_PROXY, HTTP_PROXY, HTTP_PROXY_USER, HTTP_PROXY_PASS の設定でもいけると思う。 !!!モジュールの一覧 CPANで組み込まれたすべてのモジュールは、autobundle コマンドを実行したときの出力結果(コンソールでも、スナップショットファイルでも)の内容になる。ただこの一覧は、モジュールの中のサブモジュール(Encode なかの Encode::JP など)もすべて列挙される。 なので、perldoc を元にインストールした(されている)モジュールの一覧を作成する。 perl -e 'print "$_\n" for sort map {$_ =~ m/^.+?"Module" (.+?)$/} qx/perldoc -t perllocal/;' cat `/usr/bin/perldoc -l perllocal` | perl -nle '/C L<([^\|]*?)\|.*?>/ and print "$1"' | sort -u 前者は元々ほかの情報なども合わせてスクリプトで取得する処理から抜粋。また、後者の方が perldoc の整形がない分早い。