作る前にCPANを探せ

折角MacBookが手元にあるのに、毎回一々サーバにUploadしてTRY&ERRORというのもかなり馬鹿馬鹿しいなと思っていたが、
当然@NICの位置もサーバと違うのでエラーが無くなった後に書き換えてUploadというのもどうか?という事でほったらかしにしていた。
先日、たまたま眺めていた

WEB+DB PRESS Vol.39

WEB+DB PRESS Vol.39

でFindBin::libsというCPANモジュールが紹介されていて

FindBin:libsを使うと、スクリプトの実行ディレクトリのサブディレクトリからライブラリパスをいい感じに探し出してくれます。これでスプリプトに特定のパスを探し出してくれます。

との事、早速とりあえずサーバ側wでテスト。
当然上手く動作したのでMacBookでもCPANをインストールして環境を整えた。
と、ここ迄は前フリ
ついでにSearch the CPAN - metacpan.orgを漁っていたらBusiness::ISBNというモジュールを発見、ドキュメントを読みつつ試してみた。

#!/usr/bin/perl
use FindBin::libs;
use strict;
use warnings;
use Business::ISBN;
my $isbn_object = Business::ISBN->new('4150400083');
print $isbn_object->as_string . "\n";
my $isbn13 = $isbn_object->as_isbn13;
print "$isbn13\n";

ハイフンをつけるのは上手く行ったけどISBN13への変換がハッシュで帰って来ていて何故?と思いつつハッシュをダンプしてみると

$VAR1 = bless( {
                 'common_data' => '4150400083',
                 'publisher_code' => '15',
                 'group_code' => '4',
                 'input_isbn' => '4150400083',
                 'valid' => 1,
                 'checksum' => '3',
                 'type' => 'ISBN10',
                 'isbn' => '4150400083',
                 'article_code' => '040008',
                 'prefix' => ''
               }, 'Business::ISBN10' );

こうですか?

my $isbn13 = $isbn_object->as_isbn13->isbn;

チェックデジットが正しいか否かの機能はあるけどチェックデジットを付与する機能が無かったり*1、ハイフンを付与する際にチェックデジットが合っていないと残念な部分あるけれどもスッキリ書けるし今後はこのモジュールを使ってもいいかな?
#もちろんあくまで趣味でやってる事なので考える事自体は無駄ではないと思いますけどね

*1:一旦ISBN10->ISBN13またはISBN13->ISBN10に変換して再変換で可能ではあるが