ISBN-10ISBN-13相互変換とハイフン編集をするjavascriptの生成実験その3

今日あらためて昨日のスクリプトを動かしていたら、メッセージが表示されている事に気がついた

Use of uninitialized value in string at ./get_test.pl line 23.
Use of uninitialized value in length at ./get_test.pl line 25.
Use of uninitialized value in string at ./get_test.pl line 23.
Use of uninitialized value in length at ./get_test.pl line 25.

スクリプトを眺めても別におかしいところがないなと思いつつ、printで色々表示させたところ元データの微妙なところを発見

gi.area9972 = new Object;
gi.area9972.text="Peru";
gi.area9972.pubrange="00-09;1;200-249;2500-2999;30-59;600-899;9000-9999";

gi.area9975 = new Object;
gi.area9975.text="Moldova";
gi.area9975.pubrange="0;100-399;4000-4499;45-89;900-949;9500-9999";

常にxxx-yyyな表記ではないのね。

		my $max = (split /-/)[1];

なんて書いちゃってたものだから、yyyが無いとエラーには当然なりますわな。
配列の個数を調べてゴニョゴニョとかかっこわるいなと思いつつ、リャマ本を眺めていたら

配列にたいして負のインデクスを指定すると、要素を末尾から数えます。

とある。
という事は次のように記述すれば、xxx-yyyだろうがyyyだろうが常に配列の最後の値を持って来れると

		my $max = (split /-/)[-1];

無事OK!

ちなみに

  • JSで生成している版は最初からうまくいってましたとさ
//	Peru
		["997209999","4","2"],
		["997219999","4","1"],
		["997224999","4","3"],
		["997229999","4","4"],
		["997259999","4","2"],
		["997289999","4","3"],
		["997299999","4","4"],
//	Moldova
		["997509999","4","1"],
		["997539999","4","3"],
		["997544999","4","4"],
		["997589999","4","2"],
		["997594999","4","3"],
		["997599999","4","4"],
  • 残念な事にISBN検索でハイフンが必須なパッケージの割合って思ったより少ないんだよね*1

*1:もちろん都道府県毎のバラツキはありますが