File Coverage

blib/lib/Data/SIprefixes/femto.pm
Criterion Covered Total %
statement 12 67 17.9
branch 0 22 0.0
condition n/a
subroutine 4 10 40.0
pod 6 6 100.0
total 22 105 20.9


line stmt bran cond sub pod time code
1             package Data::SIprefixes::femto;
2              
3 1     1   20943 use strict;
  1         2  
  1         24  
4 1     1   6 use warnings;
  1         1  
  1         25  
5 1     1   861 use bignum;
  1         8086  
  1         5  
6 1     1   64687 use base 'Error::Helper';
  1         3  
  1         786  
7              
8             =head1 NAME
9              
10             Data::SIprefixes::femto - This provides femto matching for Data::SIprefixes.
11              
12             =head1 VERSION
13              
14             Version 0.0.0
15              
16             =cut
17              
18             our $VERSION = '0.0.0';
19              
20             =head1 SYNOPSIS
21              
22             use Data::SIprefixes::femto;
23            
24             my $prefix=Data::SIprefixes::femto->new;
25              
26             my $origMeasure='femtometer';
27            
28             my $measure=$prefix->longMatch( $origMeasure );
29             my $long;
30             if ( $prefix->error ){
31             warn('error:'.$prefix->error.': '.$prefix->errorString);
32             }elseif( ! defined( $measure ) ){
33            
34             $measure=$prefix->shortMatch( $origMeasure );
35            
36             }else{
37             $long=1;
38             }
39              
40             =head1 METHODS
41              
42             =head2 new
43              
44             This initiates the object.
45              
46             my $prefix=$Data::SIprefixes::femto->new;
47              
48             =cut
49              
50             sub new {
51 0     0 1   my $string=$_[1];
52              
53 0           my $self={
54             perror=>undef,
55             error=>undef,
56             errorString=>'',
57             fromBase=>1000,
58             toBase=>1000,
59             };
60 0           bless $self;
61            
62 0           $self->{fromBase} **= 5;
63 0           $self->{toBase} **= -5;
64              
65 0           return $self;
66             }
67              
68             =head2 fromBase
69              
70             Returns the number needed to to multiple it by to get from the unprefixed
71             measure to the prefixed measure.
72              
73             my $fromBase=$prefix->fromBase;
74              
75             =cut
76              
77             sub fromBase{
78 0     0 1   my $self=$_[0];
79              
80 0 0         if ( ! $self->errorblank ){
81 0           $self->warnString('Failed to blank the previous error');
82             }
83              
84 0           return $self->fromBase;
85             }
86              
87             =head2 longMatch
88              
89             Matches long SI prefixed measures.
90              
91             A match returns the measure with out the SI prefix, which will be ''
92             if no measure is specified.
93              
94             my $measure=$prefix->longMatch( $origMeasure );
95             if ( $prefix->error ){
96             warn('error:'.$foo->error.': '.$foo->errorString);
97             }
98              
99             =cut
100              
101             sub longMatch{
102 0     0 1   my $self=$_[0];
103 0           my $measure=$_[1];
104              
105 0 0         if ( ! $self->errorblank ){
106 0           $self->warnString('Failed to blank the previous error');
107             }
108              
109 0 0         if ( ! defined( $measure ) ){
110 0           $self->{error}=1;
111 0           $self->{errorString}='No measure defined';
112 0           $self->warn;
113 0           return undef;
114             }
115              
116 0 0         if ( $measure=~/^femto/ ){
117 0           my $origMeasure=$measure;
118 0           $measure=~s/^femto//g;
119              
120 0 0         if ( $measure =~ /^ / ){
121 0           $self->{error}=2;
122 0           $self->{errorString}='Space found after prefix, /^femto/, in "'.$origMeasure.'"' ;
123 0           $self->warn;
124 0           return undef;
125             }
126              
127 0           return $measure;
128             }
129              
130 0           return undef;
131             }
132              
133             =head2 shortMatch
134              
135             Matches short SI prefixed measures.
136              
137             A match returns the measure with out the SI prefix, which will be ''
138             if no measure is specified.
139              
140             my $measure=$prefix->longMatch( $origMeasure );
141             if ( $prefix->error ){
142             warn('error:'.$foo->error.': '.$foo->errorString);
143             }
144              
145             =cut
146              
147             sub shortMatch{
148 0     0 1   my $self=$_[0];
149 0           my $measure=$_[1];
150              
151 0 0         if ( ! $self->errorblank ){
152 0           $self->warnString('Failed to blank the previous error');
153             }
154              
155 0 0         if ( ! defined( $measure ) ){
156 0           $self->{error}=1;
157 0           $self->{errorString}='No measure defined';
158 0           $self->warn;
159 0           return undef;
160             }
161              
162             #avoid possible collisions
163 0 0         if ( $measure eq 'farad' ){
164 0           return $measure;
165             }
166              
167 0 0         if ( $measure=~/^f/ ){
168 0           my $origMeasure=$measure;
169 0           $measure=~s/^f//g;
170              
171 0 0         if ( $measure =~ /^ / ){
172 0           $self->{error}=2;
173 0           $self->{errorString}='Space found after prefix, /^f/, in "'.$origMeasure.'"' ;
174 0           $self->warn;
175 0           return undef;
176             }
177              
178 0           return $measure;
179             }
180              
181 0           return undef;
182             }
183              
184             =head2 symbol
185              
186             This returns the symbol for the prefix.
187              
188             my $symbol=$prefix->symbol;
189              
190             =cut
191              
192             sub symbol{
193 0     0 1   return 'f';
194             }
195              
196             =head2 toBase
197              
198             Returns the number needed to to multiple it by to get from the prefixed measure
199             number to the unprefixed measure.
200              
201             my $toBase=$prefix->toBase;
202              
203             =cut
204              
205             sub toBase{
206 0     0 1   my $self=$_[0];
207              
208 0 0         if ( ! $self->errorblank ){
209 0           $self->warnString('Failed to blank the previous error');
210             }
211              
212 0           return $self->toBase;
213             }
214              
215             =head1 ERROR CODES
216              
217             =head2 1
218              
219             Nothing passed for a measure.
220              
221             =head2 2
222              
223             Space found after prefix.
224              
225             =head1 AUTHOR
226              
227             Zane C. Bowers-Hadley, C<< >>
228              
229             =head1 BUGS
230              
231             Please report any bugs or feature requests to C, or through
232             the web interface at L. I will be notified, and then you'll
233             automatically be notified of progress on your bug as I make changes.
234              
235              
236              
237              
238             =head1 SUPPORT
239              
240             You can find documentation for this module with the perldoc command.
241              
242             perldoc Data::SIprefixes::femto
243              
244              
245             You can also look for information at:
246              
247             =over 4
248              
249             =item * RT: CPAN's request tracker (report bugs here)
250              
251             L
252              
253             =item * AnnoCPAN: Annotated CPAN documentation
254              
255             L
256              
257             =item * CPAN Ratings
258              
259             L
260              
261             =item * Search CPAN
262              
263             L
264              
265             =back
266              
267              
268             =head1 ACKNOWLEDGEMENTS
269              
270              
271             =head1 LICENSE AND COPYRIGHT
272              
273             Copyright 2012 Zane C. Bowers-Hadley.
274              
275             This program is free software; you can redistribute it and/or modify it
276             under the terms of either: the GNU General Public License as published
277             by the Free Software Foundation; or the Artistic License.
278              
279             See http://dev.perl.org/licenses/ for more information.
280              
281              
282             =cut
283              
284             1; # End of Data::SIprefixes::femto