Snippets

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

Created by sironekotoro
#!/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年

Comments (0)