#!/usr/bin/perl
use strict;
my $endNum = 100;
my %hashFizzBuzz = (
'Fizz' => 3
,'Buzz' => 5
);
for(my $i=1; $i<=$endNum; $i++){
printFizzBuzz($i);
}
exit 0;
sub printFizzBuzz(){
my $num = shift();
my $flag = 0;
my @arrayFizzBuzz = keys(%hashFizzBuzz);
foreach my $key (@arrayFizzBuzz){
my $result = $num % $hashFizzBuzz{$key};
if($result == 0 ){
print $key if($result == 0 );
$flag = 1;
}
}
print $num if($flag == 0);
print "\n";
}
終了値を引数にして、入力チェックをつけてみた。
#!/usr/bin/perl
use strict;
my $endNum = validate(\@ARGV);
my %hashFizzBuzz = (
'Fizz' => 3
,'Buzz' => 5
);
for(my $i=1; $i< =$endNum; $i++){
printFizzBuzz($i);
}
exit 0;
sub printFizzBuzz(){
my $num = shift();
my $flag = 0;
my @arrayFizzBuzz = keys(%hashFizzBuzz);
foreach my $key (@arrayFizzBuzz){
my $result = $num % $hashFizzBuzz{$key};
if($result == 0 ){
print $key if($result == 0 );
$flag = 1;
}
}
print $num if($flag == 0);
print "\n";
}
sub validate(){
my $val = shift();
if(@$val != 1){
print "Too many args.\n";
exit 1;
}
if($val->[0] !~ /^\d+$/ || $val->[0] < = 0 ){
print "input error.\n";
exit 1;
}
return $val->[0];
}
