[3.10]練習問題2 修正

id:kidd-number5さんから頂いたアドバイスと、「はじめてのPerl」での解答を参考にしてプログラムを再度修正。

大まかな変更点は、
1.今まで対応表の番号付けが0から始まっていたのを1からに変更。
  このプログラムをユーザーが使用すると考えると、やはり0から始まるのにはわずかな違和感を感じるだろうと思い変更。
2.id:kidd-number5さんに教えて頂いた「マジックナンバー」の混入を避けた。
  今回、一番大きい変更点。
  これに伴って変数の初期値設定をし、定義時のコメントをつけた。
3.「2.」の変更により、対応表の作成をfor命令を用いて自動化。
  表内の要素数が多くなればなるほど、効果を発揮するはず。

#! /usr/local/bin/perl
# ex3-2

use strict;
use warnings;

my @person = qw( dymmy_item fred betty barney dino wilma pebbles bamm-bamm );
print "
表\示したい人名に対応する数を入力してください。数の入力は複数回可能\です。
入力を終了するときCtrl + Zキーを押してください。

数と人名の対応は以下のようになっています。\n";

my @table = (); # 以下のfor命令中で数と人名の対応表を作成し、それを@tableに格納
for (my $i = 1; ($i <= $#person); $i++){
    $table[$i - 1] = "$i - $person[$i]\n";
}

print " @table\n";

chomp(my @nums = <STDIN>);
print "\n人名の表\示を開始します。\n";

my $mini_num = 1;          # @tableの最小値
my $max_num = @person - 1; # @tableの最大値
foreach(@nums){
    if( ($mini_num <= $_) and ($_ <= $max_num) ){
	print "$person[$_]\n";
    }else{
	print "入力された数$_は不正です。$mini_numから$max_numまでの数を入力してください。\n";
    }
}

結果はこちら。


表示したい人名に対応する数を入力してください。数の入力は複数回可能です。
入力を終了するときCtrl + Zキーを押してください。

数と人名の対応は以下のようになっています。
1 - fred
2 - betty
3 - barney
4 - dino
5 - wilma
6 - pebbles
7 - bamm-bamm

-1
0
1
7
8
100
^Z

人名の表示を開始します。
入力された数-1は不正です。1から7までの数を入力してください。
入力された数0は不正です。1から7までの数を入力してください。
fred
bamm-bamm
入力された数8は不正です。1から7までの数を入力してください。
入力された数100は不正です。1から7までの数を入力してください。

今回のプログラムの修正に当たって、参考になったページ。
http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/example/MagicNumber.html
運用、保守時のことも考慮しておけるように。