in reply to converting "30k" string to integer
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
|
|---|