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