Snippets

sironekotoro Perl入学式 2018 第4回 復習問題 calc.pl

Created by sironekotoro

File calc.pl Added

  • Ignore whitespace
  • Hide word diff
+#!/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,
+        };
+    }
+
+}
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.