more examples
[gitmo/Moose-Autobox.git] / examples / units / time.t
CommitLineData
be334002 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Moose::Autobox;
7use Moose::Autobox::Undef;
8
9{
10 package Units::Time;
11 use Moose::Role;
12 use Moose::Autobox;
13
14 sub seconds { $_[0] }
15 sub minutes { $_[0] * 60 }
16 sub hours { $_[0] * 60->minutes }
17 sub days { $_[0] * 24->hours }
18 sub weeks { $_[0] * 7->days }
19 sub years { $_[0] * 365->days }
20 sub centuries { $_[0] * 10->years }
21
22 sub ago {
23 my ($self, $time) = @_;
24 $time ||= time();
25 $time - $self;
26 }
27
28 sub since {
29 my ($self, $time) = @_;
30 $time ||= time();
31 $time + $self;
32 }
33
34 {
35 no warnings 'once';
36
37 # singular versions
38 *second = \&seconds;
39 *minute = \&minutes;
40 *hour = \&hours;
41 *day = \&days;
42 *week = \&weeks;
43 *year = \&years;
44 *century = \&centuries;
45
46 *til = \&ago;
47 *from_now = \&since;
48 }
49
50 sub as_string { scalar localtime $_[0] }
51
52}
53
244bd352 54Moose::Autobox->mixin_additional_role(SCALAR => 'Units::Time');
be334002 55
56$\ = "\n";
57
58print "2 days ago was : " . 2->days->ago->as_string;
59print "3 weeks from now will be : " . 3->weeks->from_now->as_string;
60my $one_week_ago = 1->week->ago;
61print "1 day until 1 week ago : " . 1->day->til($one_week_ago)->as_string;
62print "2 years since 1 week ago : " . 2->years->since($one_week_ago)->as_string;
63
64