File Coverage

blib/lib/Number/Iterator.pm
Criterion Covered Total %
statement 27 33 81.8
branch 5 10 50.0
condition n/a
subroutine 10 12 83.3
pod 0 5 0.0
total 42 60 70.0


line stmt bran cond sub pod time code
1             package Number::Iterator;
2              
3 2     2   310432 use 5.006;
  2         9  
4 2     2   20 use strict;
  2         12  
  2         72  
5 2     2   11 use warnings;
  2         6  
  2         427  
6              
7             our $VERSION = '1.01';
8              
9             use overload (
10             '""' => sub {
11 7     7   75 $_[0]->{value};
12             },
13             '++' => sub {
14 6     6   61 $_[0]->iterate();
15             },
16             '--' => sub {
17 2     2   14 $_[0]->deiterate();
18             }
19 2     2   1475 );
  2         4979  
  2         27  
20              
21             sub new {
22 2     2 0 232133 my ($self, %args) = @_;
23 2 50       12 $args{value} = 0 unless $args{value};
24 2         16 return bless \%args, $self;
25             }
26              
27             sub iterate {
28 6     6 0 12 my ($self) = @_;
29 6 100       19 if (defined $self->{iterate}) {
30 3         11 $self->{iterate}($self);
31             } else {
32 3         6 $self->{value} += $self->{interval};
33             }
34 6         29 return $self;
35             }
36              
37             sub deiterate {
38 2     2 0 7 my ($self) = @_;
39 2 100       9 if (defined $self->{deiterate}) {
40 1         6 $self->{deiterate}($self);
41             } else {
42 1         3 $self->{value} -= $self->{interval};
43             }
44 2         12 return $self;
45             }
46              
47             sub value {
48 0     0 0   my ($self, $val) = @_;
49 0 0         $self->{value} = $val if (defined $val);
50 0           return $self->{value};
51             }
52              
53             sub interval {
54 0     0 0   my ($self, $val) = @_;
55 0 0         $self->{interval} = $val if (defined $val);
56 0           return $self->{interval};
57             }
58              
59             __END__;