Snippets

sironekotoro 平成○○年 と入力すると西暦にして返してくれる君

Created by sironekotoro

File heisei_era_converter.pl Added

  • Ignore whitespace
  • Hide word diff
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+binmode( STDIN,  ':utf8' );    # 標準入力をutf8として認識する
+binmode( STDOUT, ':utf8' );    # 標準出力をutf8にする
+
+use utf8; # ソースコードでマルチバイト文字を使う際に利用
+          # このコードの場合は「年」
+
+print 'INPUT 例)平成30年 > ';
+
+my $era = <STDIN>;  # 標準入力から受け取り, 変数 $era に入れる
+chomp $era;         # 受け取った文字列の改行を削除
+
+# 正規表現で「文字のパターン」から以下の情報を取り出す
+# 年号: 冒頭の2文字 最初のカッコでキャプチャするので $1 に格納される
+# 年数: 年号の後にあり、かつ末尾の「年」より手前にある数字を $2 に格納される
+
+$era =~ /                       # era: 時代
+         \A                     # \A 文字列の先頭の位置を表すアンカー記号
+           (                    # 最初の($1)キャプチャ開始のカッコ
+            \w                  # 文字1つにマッチする
+              {2}               # 直前のマッチ(1文字)が2回あるという量指定子
+                 )              # 最初の($1)キャプチャ終了のカッコ
+                  (             # 2回目の($2)キャプチャ開始のカッコ
+                   \d           # 数字1つにマッチする
+                     +          # 直前のマッチが1個以上あるという量指定子
+                      )         # 2回目の($2)キャプチャ終了のカッコ
+                       年       # 年
+                         \z     # 文字列の終端の位置を表すアンカー記号
+                           /x;  # 正規表現のデリミタと拡張正規表現オプションの x
+
+# $era =~ /\A(\w{2})(\d+)年\z/; # 解説抜きで1行で書く場合の正規表現。末尾のxが不要
+
+# 仮に入力が 平成30年 だった場合
+my $era_name   = $1;
+my $era_number = $2;
+print '年号は「' . $era_name . "」\n";        # 平成
+print '年は' . $era_number . "\n";               # 30
+print '西暦は' . $era_number . '年' . "\n";    # 2018年
HTTPS SSH

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