#歳前半、後半関数
誕生日を引数に、何歳代の前半か、後半かを出力する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; }