tetsunosukeのnotebook

tetsunosukeのメモです

Perl練習問題の解答 for ablaboさん

なんかエラーが起こったりとかするんで、下記のプログラムはあてにならないらしい。指摘されちゃいました。いい加減だなあ自分^-^;;;

id:ablaboさんのところの練習問題(http://d.hatena.ne.jp/ablabo/20060129/1138529862)で「自分ならこう書く」を書かなきゃってことで。

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

use strict;
use warnings;

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

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

## 配列personの内容を表示(indexは1から数える)
my $index = 0;
foreach my $person_name(@person){
	print " " . ++$index . " - " . $person_name . "\n";
}

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

foreach(@nums){
  #if($_ = /\D/ and defined($person[$_-1])){
  if($_ =~ /\d/ and defined($person[$_-1])){
	  print "$person[$_-1]\n";
  }else{
	  print "入力された数$_は不正です。1から$#personまでの数を入力してください。\n";
  }
}

いじったポイントは

my @person = qw( dymmy_item fred betty barney dino wilma pebbles bamm-bamm );

と、ダミーをはさまなくてよいようにしたこと。

@tableという特に意味のない変数を極力使わないようにしたこと。

($mini_num <= $_) and ($_ <= $max_num) 

という条件を、$_の配列が定義してある範囲で判定するようにしたこと。

$mini_numについては特に変数(定数っぽく)で使う必要はないかと思って1で固定にしました。