#歳前半、後半関数


誕生日を引数に、何歳代の前半か、後半かを出力するTTフィルター作ってんけど、
これも、コードがきに食わない。もっと、スマートにできないか。誰か教えて!

sub fs_fazzy_birthday {
    my $date = shift;

   # $date must be yyyy-mm--dd format.
    $date =~ m/(\d+)-(\d+)-(\d+)/;

    my $birthday
        = DateTime->new(
            year => $1,
            month=> $2,
            day  => $3,
          );

    my $today   = DateTime->now();
    my $dt      = $today - $birthday;
    my $age     = $dt->years ;

    my $first_digit = substr( $age , length($age) - 1 , 1 );
    my $more_than_digit = substr( $age , 0 , length($age) - 1 );
    my $str = $first_digit < 5 ? '前半' : '後半';
    return $more_than_digit . '0代' . $str;
}

修正!

k2さんと、id:ikasam_a さんの添削を反映しました!ありがとう!

#!/usr/bin/perl -w

use strict;
use DateTime;
use DateTime::Format::Strptime qw(strptime);

print fs_fazzy_birthday('1977-12-24');

sub fs_fazzy_birthday {
    my $age = (DateTime->today - strptime('%Y-%m-%d' => shift))->years;
    $age .= chop $age < 5 ? '0代前半' : '0代後半';
    return $age;
}