ISBNをハイフン編集してJSONPで返すサービスを最新化してみた

Business::ISBNのデータを自分で更新出来たらなとモジュールを眺めるとデータはData.pmにあるらしい

use Business::ISBN::Data 20081208; # now a separate module

で、Data.pmでどのように持っているかというと

%country_data = (
0     => ['English speaking area' =>   ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '89999', '900000' => '949999', '9500000' => '9999999'] ],
1     => ['English speaking area' =>   ['00' => '09', '100' => '399', '4000' => '5499', '55000' => '86979', '869800' => '998999'] ],
2     => ['French speaking area' =>   ['00' => '19', '200' => '349', '35000' => '39999', '400' => '699', '7000' => '8399', '84000' => '89999', '900000' => '949999', '9500000' => '9999999'] ],

http://www.isbn-international.org/converter/ranges.htmで使っているhttp://www.isbn-international.org/converter/ranges.jsをごにょるスクリプトを書きながら出版社コードの上限下限をセットで苦戦
Data.pmのコメントを眺めると

This module lives in the Github repository with Business::ISBN:

	git://github.com/briandfoy/business--isbn.git

Github見たら最新情報があるかなと見に行くと最新バージョンは20081208版で変わりないけど、make_data.plなんてのを発見、そのものズバリのPerlスクリプトが本家にあるとは・・・
早速うごかしたいところであるけどPerlのバージョンが5.010以上じゃないと動かない、次のあたりを5.8で書くには面倒だ

my @keys = qw(text ranges);
my %data;

while( $js_data =~
    /
        ^gi\.area(?<group>\d+)\.text \s* = \s* "(?<text>.*?)" ;?  [\r\n]+
        ^gi\.area(\1)\.pubrange \s* = \s* "(?<ranges>.*?)"    ;?  [\r\n]+
    /gmx
    )
    {
    @{ $data{ $+{group} } }{ @keys } = @+{ @keys };
    }

#名前付きキャプチャバッファすごいな
こんなきれいに書く自信が無いのでMacBookにPerl5.010をインストール(別ディレクトリで)して実行、サーバのData.pmを最新化した
これで次のあたりも対応できました

09.12.2008; Affed Mongolia (99962) "0-4;50-79;800-999"
24.11.2008; Added El Salvador (99961) "0-3;40-89;900-999"
20.11.2008; Changed Benin (99919) to include "300-399" (previously undefined)
24.10.2008: Define India (93)"00-09;100-499;5000-7999;80000-94999;950000-999999"
20.10.2008; Changed Kenya (9966) "00-19" becomes "000-199"
05.10.2008; Addec Ukraine (611)"00-49;500-699;7000-8999;90000-99999"
29.09.2008; Added Syria (9933) "0-0;10-39;400-899;9000-9999"