Created by
sironekotoro
| #!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
# Perl入学式 2018 第4回 復習問題
# https://github.com/perl-entrance-org/workshop-2018/blob/master/4th/practice.md
# 復習問題(calc.pl)
# 2つの数値を引数に取り, 以下の機能を持つ関数 calc を作成してください.
# 1.add, sub, mul, div, mod という key と、
# それぞれの演算結果(+, -, *, /, %)を value
# に持つハッシュリファレンスを返す.
# 2.引数が数字であるかどうか正規表現を使って判定する.
# 3.数値以外が引数であった場合は undef を返す.
my $hash_ref = calc( 32, 5 );
print Dumper $hash_ref;
$hash_ref = calc( 3, 0 );
print Dumper $hash_ref;
$hash_ref = calc( 32, 'A' );
print Dumper $hash_ref;
sub calc {
my ( $left, $right ) = @_;
# 2.引数が数字であるかどうか正規表現を使って判定する.
# 数値かどうかの判別には正規表現のメタ文字 \D を利用
if ( $left =~ /\D+/ || $right =~ /\D+/ ) {
# 3.数値以外が引数であった場合は undef を返す.
return undef;
}
elsif ( $right == 0 ) {
# 0で除算の際にはエラーになるので、第二引数 $rightが
# 0 の場合には、div,modを除いた結果を返す
# (条件文にはないけど追加)
return {
add => $left + $right,
sub => $left - $right,
mul => $left * $right,
};
}
else {
# 1.add, sub, mul, div, mod という key と、
# それぞれの演算結果(+, -, *, /, %)を value
# に持つハッシュリファレンスを返す.
return {
add => $left + $right,
sub => $left - $right,
mul => $left * $right,
div => $left / $right,
mod => $left % $right,
};
}
}
|