CPAN中是否有实际的包来转换这样的字符串:
my $string = "54.4M"
my $string2 = "3.2G"
以字节为单位的实际数字:
54,400,000
3,200,000,000
反之亦然.
原则上我最后要做的是总结所有内存大小.
解决方法:
use strict;
use warnings;
use Number::FormatEng qw(:all);
use Number::Format qw(:subs);
my $string = "54.4M" ;
my $string2 = "3.2G" ;
print format_number(unformat_pref($string)) , "\n";
print format_number(unformat_pref($string2)) , "\n";
__END__
54,400,000
3,200,000,000
顺便说一下,如果要对结果执行计算,则只需要unformat_pref.
由于Number::FormatEng用于工程符号转换(不是字节),因此其前缀区分大小写.如果要将其用于千字节,则必须使用小写k.
Number::Format会将这些字符串转换为实际字节(有点,几乎).
use Number::Format qw(:subs);
my $string = "54.4M" ;
my $string2 = "3.2G" ;
print round(unformat_number($string) , 0), "\n";
print round(unformat_number($string2), 0), "\n";
__END__
57042534
3435973837
我说“有点,几乎”的原因是Number :: Format将1K视为等于1024字节,而不是1000字节.这可能就是为什么它会给出一个奇怪的结果(带小数字节),除非它是四舍五入的.
标签:unix,linux,perl
来源: https://codeday.me/bug/20190717/1484607.html