★補足:2016-06-27
★calendar-v0.4.2.tar.gzの場所が変わりました。以下のところから入手できます。
★http://ftp.auckland.ac.nz/CPAN/modules/by-module/Calendar/YEWENBIN/

★日付計算モジュール自体はより新しく、活発にメンテされているモジュールがCPAN上にありますが(SoftwareDesign誌で紹介したDate::Simpleなど)『すぐわかるオブジェクト指向Perl』のサンプルをそのまま動かしたい方、tarballからのインストールを体験したい方は、このtarballをお使いください。

今日は拙著『すぐわかるオブジェクト指向Perl』をWindowsで勉強する時に、行き詰まる点を補足する。

BfPerlDetail
Perlというのはコンピューターでプログラミングする言語のうち、一番ラクチンなものの一つである。
『すぐわかるオブジェクト指向Perl』はOOP(オブジェクト指向プログラミング)をPerlで行う、あるいはPerlでオブジェクト指向プログラミングを理解するという趣旨の本だ。
以降は「拙著」と略す。

さて、Perlでは、CPANというサイトに、世界中のPerlプログラマーがプログラムの部品およびツールをアップロードしている。
拙著では、オブジェクト指向プログラムを書くための用例として、CPANから日付オブジェクトの作成および計算を行うモジュール(プログラムの部品)であ るCalendar.pmをお手元のPerl環境にインストールし、使い、さらにオブジェクト指向の継承機能を使ってアップグレードする方法を書いてい る。
(他に三角形の面積をオブジェクト化するモジュールをスクラッチから作ったりもしている。)

拙著を書いたときには、Calendar.pmをCPANサイトから「cpan」コマンドを使ってインストールすることが出来た。
ところが現在は、できなくなっている。
tar.gz形式で圧縮したファイル(tarballと言う)をダウンロードすることは出来るのだが、cpanコマンドを使ったインストールが出来ない。

この問題はすでに分かっていて、本ブログでも508回、518回、523回、528回に渡って書いている。

イジハピ! : オブジェクト指向Perl を含む記事

ところが、先日このブログを読んでもやり方がわからないという読者の方のお便りをいただいたので、さらに簡略化した記事を書く。
同様の原因で拙著で詰まっている方は参考にしてください。
基本的に以下の作業で済む。

(1) cpanコマンドを使ってcpanminusツールをインストールする
(2) cpanminusツール(cpanmコマンド)を使ってtarballからCalendar.pmをインストールする

では1個1個説明する。
本書ではWindowsでStrawberry Perlを使う。

(0)Perlは動くが、Calendar.pmが入っていない状態を確認する

まず、お手元の環境でPerlが使えることを試す。
Perlのインストール環境を確認するにはperlコマンドに-vというオプションを渡して実行する。
ここで-vとはversionの略である。
C:\Users>perl -v

This is perl 5, version 20, subversion 2 (v5.20.2) built for MSWin32-x86-multi-thread-64int

Copyright 1987-2015, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.


C:\Users>
上のように表示されたので、5.20.2がインストールされていることが分かる。

拙著では、Calendar.pmのテストプログラムとして、以下のcalTest.plというプログラムを起動している。
#! /usr/local/bin/perl
#
# calTest.pl --- Calendar のテスト

use 5.010;
use strict;
use warnings;

use Calendar;

my $date = Calendar->new_from_Gregorian(12, 16, 2006);
print $date->date_string("Gregorian date: %M %W %d %Y"), "\n";

my $newdate = $date + 7;
print $newdate->date_string("Gregorian date of next week: %D"), "\n";

$newdate = $date-7;
print $newdate->date_string("Absolute date of last week: %A\n");

my $diff = $date-$newdate;
printf "There is %d days between %s and %s\n",
$diff, $date->date_string("%D"), $newdate->date_string("%D");

$date->convert_to_Julian;
print $date->date_string("Julian date: %M %W %d %Y"), "\n";
これをいきなり実行してみる。
C:\Users>calTest.pl
Can't locate Calendar.pm in @INC (you may need to install the Calendar module) (@INC contains: C:/Strawberry/perl/site/lib C:/Strawberry/perl/vendor/lib C:/Strawberry/perl/lib .) at C:\Strawberry\perl\perl\calTest.pl line 9.
BEGIN failed--compilation aborted at C:\Strawberry\perl\perl\calTest.pl line 9.

C:\Users>
この「Can't locate xxx in @INC」というエラーメッセージは、モジュールがPerlにインストールされていないことを示す。
上の場合はCalendar.pmである。

普通CPANで公開されているモジュールをインストールするためにはcpanコマンドを以下のように使うが、Calendar.pmに対してこれを行うと、失敗する。
C:\Users>cpan install Calendar.pm
CPAN: CPAN::SQLite loaded ok (v0.204)
CPAN: LWP::UserAgent loaded ok (v6.13)
CPAN: Time::HiRes loaded ok (v1.9726)
Fetching with LWP:
http://cpan.strawberryperl.com/authors/01mailrc.txt.gz
CPAN: YAML::XS loaded ok (v0.59)
Fetching with LWP:
http://cpan.strawberryperl.com/modules/02packages.details.txt.gz
Fetching with LWP:
http://cpan.strawberryperl.com/modules/03modlist.data.gz
Creating database file ...
Done!
Warning: Cannot install Calendar.pm, don't know what it is.
Try the command

i /Calendar.pm/

to find objects with matching identifiers.

C:\Users>
さてどうするか。

(1) cpanコマンドを使ってcpanminusツールをインストールする

CPANを検索すると以下のリンクにCalendar.pmのページが存在する。

Calendar - search.cpan.org

このページの右の方に「Download: Calendar-v0.4.2.tar.gz」というリンクが存在する。
このリンクをすぐにクリックするとtarballがダウンロードされる。
tarballはディレクトリをtarコマンドで書庫化し、gzipで圧縮したファイルである。
右クリックして「リンクのURLをコピー」を選択すると、以下のURLがクリップボードに保存される。

http://search.cpan.org/CPAN/authors/id/Y/YE/YEWENBIN/Calendar-v0.4.2.tar.gz

(修正:2016-06-27)
http://ftp.auckland.ac.nz/CPAN/modules/by-module/Calendar/YEWENBIN/calendar-v0.4.2.tar.gz

ここにtarballが入っている。

tarballはgunzipおよびuntarで復元し、いにしえのmake、make test、make installで手動インストールすることもできるが、cpanminusを使うともっと簡単である。
これはcpanを強化したツールで、tarballを直接インストールできる。
cpanコマンドに「App::cpanminus」を渡してインストールする。
C:\Users>cpan install App::cpanminus
CPAN: CPAN::SQLite loaded ok (v0.204)
Database was generated on Wed, 06 May 2015 08:50:26 GMT

Running install for module 'App::cpanminus'
CPAN: LWP::UserAgent loaded ok (v6.13)
CPAN: Time::HiRes loaded ok (v1.9726)
Fetching with LWP:
http://cpan.strawberryperl.com/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7033.tar.gz
CPAN: YAML::XS loaded ok (v0.59)
CPAN: Digest::SHA loaded ok (v5.95)
Fetching with LWP:
http://cpan.strawberryperl.com/authors/id/M/MI/MIYAGAWA/CHECKSUMS
CPAN: Compress::Zlib loaded ok (v2.068)
Checksum for C:\STRAWB~1\cpan\sources\authors\id\M\MI\MIYAGAWA\App-cpanminus-1.7033.tar.gz ok
CPAN: Archive::Tar loaded ok (v2.04)
CPAN: File::Temp loaded ok (v0.2304)
CPAN: Parse::CPAN::Meta loaded ok (v1.4414)
CPAN: CPAN::Meta loaded ok (v2.143240)
CPAN: Module::CoreList loaded ok (v5.20150220)
Configuring M/MI/MIYAGAWA/App-cpanminus-1.7033.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a dmake-style Makefile
Writing Makefile for App::cpanminus
Writing MYMETA.yml and MYMETA.json
MIYAGAWA/App-cpanminus-1.7033.tar.gz
C:\Strawberry\perl\bin\perl.exe Makefile.PL -- OK
Running make for M/MI/MIYAGAWA/App-cpanminus-1.7033.tar.gz
cp lib/App/cpanminus.pm blib\lib\App\cpanminus.pm
cp lib/App/cpanminus/fatscript.pm blib\lib\App\cpanminus\fatscript.pm
"C:\Strawberry\perl\bin\perl.exe" -MExtUtils::Command -e cp -- bin/cpanm blib\script\cpanm
pl2bat.bat blib\script\cpanm
MIYAGAWA/App-cpanminus-1.7033.tar.gz
C:\STRAWB~1\c\bin\dmake.exe -- OK
Running make test
"C:\Strawberry\perl\bin\perl.exe" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
t/happy_cpantesters.t .. # App::cpanminus/1.7033
t/happy_cpantesters.t .. ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.05 usr + 0.01 sys = 0.06 CPU)
Result: PASS
MIYAGAWA/App-cpanminus-1.7033.tar.gz
C:\STRAWB~1\c\bin\dmake.exe test -- OK
Running make install
Installing C:\STRAWB~1\perl\site\lib\App\cpanminus.pm
Installing C:\STRAWB~1\perl\site\lib\App\cpanminus\fatscript.pm
Installing C:\STRAWB~1\perl\site\bin\cpanm
Installing C:\STRAWB~1\perl\site\bin\cpanm.bat
Appending installation info to C:\STRAWB~1\perl\lib/perllocal.pod
MIYAGAWA/App-cpanminus-1.7033.tar.gz
C:\STRAWB~1\c\bin\dmake.exe install UNINST=1 -- OK

C:\Users>
無事インストールされた。

(2) cpanminusツール(cpanmコマンド)を使ってtarballからCalendar.pmをインストールする

次にcpanminusツールを使ってCalendar.pmをインストールする。
これは、cpanmコマンドに先ほど調べたURLを渡せばよい。
C:\Users>cpanm --install http://search.cpan.org/CPAN/authors/id/Y/YE/YEWENBIN/Calendar-v0.4.2.tar.gz
--> Working on http://search.cpan.org/CPAN/authors/id/Y/YE/YEWENBIN/Calendar-v0.4.2.tar.gz
Fetching http://search.cpan.org/CPAN/authors/id/Y/YE/YEWENBIN/Calendar-v0.4.2.tar.gz ... OK
Configuring Calendar-v0.4.2 ... OK
Building and testing Calendar-v0.4.2 ... OK
Successfully installed Calendar-v0.4.21 distribution installed

C:\Users>
無事インストールされたっぽい。

早速さっきのcalTest.plをテスト実行する。
C:\Users>calTest.pl
Gregorian date: December Saturday 16 2006
Gregorian date of next week: 12/23/2006
Absolute date of last week: 732654
There is 7 days between 12/16/2006 and 12/09/2006
Julian date: December Saturday 03 2006

C:\Users>
できたー。
この手順はMac、Linux、BSD他ほとんどのOS、ディストリビューションで共通だと思うのでおためしください。