モダンPerl入門で、テストに入門してみた。その1

ファイルの作成

基本的にソースコードのコピー。

lib/Example/Software.pm
package Example::Software;

use strict;
our $VERSION = '0.00001';

sub test {
}

1;
Makefile.pm
use strict;
use inc::Module::Install;

name('Example-Software');
all_from('lib/Example/Software.pm');

WriteAll;
t/00_compile.t
# t/00_compile.t

use strict;
use Test::More;

plan( tests => 1 );

use_ok( "Example::Software" );

Makefileをつくってみる

> perl Makefile.pm

すると、inc::Module::Install 入ってないよ!って言われる。
デフォルトで入ってると思ってたよ。
ということで、inc::Module::Install をインストール。

> cpanm inc::Module::Install

Makefileををつくってみる take2

> perl Makefile.pm
include /home/tyamagu/perl/Example-Software/inc/Module/Install.pm
include inc/Module/Install/Metadata.pm
include inc/Module/Install/Base.pm
include inc/Module/Install/Makefile.pm
Cannot determine perl version info from lib/Example/Software.pm
Cannot determine author info from lib/Example/Software.pm
Cannot determine license info from lib/Example/Software.pm
include inc/Module/Install/WriteAll.pm
include inc/Module/Install/Win32.pm
include inc/Module/Install/Can.pm
include inc/Module/Install/Fetch.pm
Writing Makefile for Example::Software
Writing META.yml
No license specified, setting license = 'unknown'

色々言われるけど、とりあえず Makefile は作成される。

makeしてみる

> make
make: *** No rule to make target `Makefile.PL', needed by `Makefile'.  Stop.

エラーが出た。
なんでだろうと思ってぐぐったら拡張子が間違っているらしい。
正)Makefile.PL
誤)Makefile.pm

モダンPerl入門見直したら、PLでした。
リネーム。

> mv Makefile.pm Makefile.PL

makeしてみる take2

> make
cp lib/Example/Software.pm blib/lib/Example/Software.pm

OKっぽい。

make test してみる

> make test
cp lib/Example/Software.pm blib/lib/Example/Software.pm
> make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t
t/00_compile.t .. ok
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.03 usr  0.01 sys +  0.02 cusr  0.00 csys =  0.06 CPU)
Result: PASS

テストが走り、PASSしていることが確認できた。

まとめ

拡張子がPLじゃない場合怒られるのは何故だろう。
あとで調べたい。

追記

拡張子がPLじゃないと怒られる件について、すこし調べてみた。
作成されるMakefileの中身にMakefile.PLという文字列が含まれていることが原因だと思われる。
Makefile.PL を別名にしてMakefileを作成しなおしても、Makefile.PLは含まれていた。