将内存大小(人类可读)转换为Perl中的实际数字(字节)

nev*_*int 3 unix linux perl

CPAN中是否有实际的包来转换这样的字符串:

my $string = "54.4M"
my $string2 = "3.2G"
Run Code Online (Sandbox Code Playgroud)

以字节为单位的实际数字:

54,400,000
3,200,000,000
Run Code Online (Sandbox Code Playgroud)

反之亦然.

原则上我最后要做的是总结所有内存大小.

too*_*lic 5

要获得您要求的确切输出,请使用Number :: FormatEngNumber :: Format:

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             
Run Code Online (Sandbox Code Playgroud)

顺便说一句,只有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
Run Code Online (Sandbox Code Playgroud)

我说,之所以"有点,几乎"是Number::Format对待1K为等于1024个字节,而不是1000个字节.这可能就是为什么它会给出一个奇怪的结果(带小数字节),除非它是四舍五入的.