1package Math::Calc::Units::Convert::Byte; 2use base 'Math::Calc::Units::Convert::Base2Metric'; 3use strict; 4 5my %units = ( bit => [ 1/8, 'byte' ] ); 6my %pref = ( bit => 0.1, default => 1 ); 7my %ranges = ( default => [ 1, 999 ] ); 8 9my %total_unit_map; 10 11sub major_pref { 12 return 1; 13} 14 15sub major_variants { 16 my ($self) = @_; 17 return $self->variants('byte'); 18} 19 20sub get_ranges { 21 return \%ranges; 22} 23 24sub get_prefs { 25 return \%pref; 26} 27 28sub unit_map { 29 my ($self) = @_; 30 if (keys %total_unit_map == 0) { 31 %total_unit_map = (%{$self->SUPER::unit_map()}, %units); 32 } 33 return \%total_unit_map; 34} 35 36sub canonical_unit { return 'byte'; } 37 38sub abbreviated_canonical_unit { return 'B'; } 39 40# simple_convert : unitName x unitName -> multiplier 41# 42sub simple_convert { 43 my ($self, $from, $to) = @_; 44 45 # 'b', 'byte', or 'bytes' 46 return 1 if $from =~ /^b(yte(s?))?$/i; 47 48 if (my $easy = $self->SUPER::simple_convert($from, $to)) { 49 return $easy; 50 } 51 52 # mb == megabyte 53 if ($from =~ /^(.)b(yte(s?))?$/i) { 54 if (my ($prefix) = $self->expand($1)) { 55 return $self->simple_convert($prefix . "byte", $to); 56 } 57 } 58 59 return; # Failed 60} 61 621; 63