Something like this perhaps:
#!/usr/local/bin/perl use strict; use warnings; my %conv = (k => 1000, kb => 1024, g => 1000000, gb => 1024 * 1024); # Note that the keys are sorted to put the longer # matches first in the regex my $keys = join '|', sort { length $b <=> length $a } keys %conv; while (<DATA>) { print "$_ -> "; s/(\d+)($keys)/$1 * $conv{$2}/e; print "$_\n"; } __END__ 30k 30kb 10g 10gb
This gives:
$ ./test.pl 30k -> 30000 30kb -> 30720 10g -> 10000000 10gb -> 10485760
Update: Yes I know that some of the multipliers are wrong. Correcting them is left as as exercise for the reader :)
--"The first rule of Perl club is you do not talk about
Perl club."
-- Chip Salzenberg
In reply to Re: converting "30k" string to integer
by davorg
in thread converting "30k" string to integer
by dwhite20899
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |