What if you want to change the date
package Time; use Moose; use Moose::Util::TypeConstraints; use DateTime; subtype 'DateTime' => as Object => where { $_->isa('DateTime') }; coerce 'DateTime' => from 'HashRef' => via { DateTime->new( %{ $_ } ) } => from Int => via { DateTime->from_epoch(epoch => $_) }; has 'time' => ( is => 'rw', isa => 'DateTime', coerce => 1, default => sub { DateTime->now(); } );
And to use it:
package main; my $d = Time->new(); $d->time({year => 2005, month => 7, day => 4}); print $d->time()->ymd . "\n"; $d->time(time); print $d->time()->ymd . "\n";