This is a bit over-generalized, but allows for easy extension.
>perl -wMstrict -le
"use Regexp::Common qw(number);
;;
my %conversion = (
K => 1_000,
M => 1_000_000,
B => 1_000_000_000,
L => 100_000, LAKH => 100_000,
);
my $suffix =
qr{ (?i) @{[ join q{|}, reverse sort keys %conversion ]} }xms;
;;
for my $n (qw(28.04B 376.92M 12.3K 98.76Lakh 7l 23.45k), @ARGV) {
my ($base, $mult) =
$n =~ m{ \A ($RE{num}{real}) ($suffix) \z }xmsg;
print qq{'$n' => }, $base * $conversion{uc $mult};
}
;;
my $s = 'w 28.04b x 376.92M y 98.76L z';
$s =~ s{ ($RE{num}{real}) ($suffix) }
{ $1 * $conversion{uc $2} }xmsge;
print qq{'$s'};
"
'28.04B' => 28040000000
'376.92M' => 376920000
'12.3K' => 12300
'98.76Lakh' => 9876000
'7l' => 700000
'23.45k' => 23450
'w 28040000000 x 376920000 y 9876000 z'
Update: Added multiple conversions in a string to example.
|