#!usr/bin/perl -w use strict; my %scale= (MB => 1, GB => 1000, KB => 0.001); sub scale2MB { my $string = shift; $string =~ tr/a-z/A-Z/; if ($string =~ /^[\d.]+$/){return $string}; my ($num,$suffix) = ($string =~ /^([\d.]+)\s*(\w+)/); return ($num * $scale{$suffix}); } foreach ("10", "10.5", "10 GB", "1kb", "10.1 GB") { print "$_=",scale2MB($_),"\n"; } my $val = scale2MB("753mb") + scale2MB("50 kb"); print "753MB+50KB is: $val\n"; __END__ prints 10=10 10.5=10.5 10 GB=10000 1kb=0.001 10.1 GB=10100 753MB+50KB is: 753.05