[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
運用、保守時のことも考慮しておけるように。