今日のDSL

use DateTime;
use Time::Duration::Parse;
use DateTime::Duration;

sub say {
    my $s = shift;
    $s =~ s/ (ago)//;
    my $op = $1;
    if ($op eq 'ago') {
        my $now = DateTime->now();
        my $dt = $now->clone->subtract(seconds => parse_duration($s));
        print $dt;
    } else {
        print $s;
    }
    print "\n";
}

sub two  ($) { '2 ' . shift }
sub days ($) { 'days ' . shift }
sub ago { 'ago' }

say two days ago;

Published: 2008-11-20(Thu) 08:01