获取用内存单位表示的值

flu*_*978 3 perl

我正在寻找一种方法将以下代码片段减少为单个正则表达式语句:

if( $current_value =~ /(\d+)(MB)*/ ){
        $current_value = $1 * 1024 * 1024;
    }
    elsif( $current_value =~ /(\d+)(GB)*/ ){
        $current_value = $1 * 1024 * 1024 * 1024;
    }
    elsif( $current_value =~ /(\d+)(KB)*/ ){
        $current_value = $1 * 1024;
    }
Run Code Online (Sandbox Code Playgroud)

该代码对可以表示为单个数字(字节)、数字和 KB(千字节)、兆字节(MB)等的值进行评估。如何减少代码块?

too*_*lic 5

数字::格式

use warnings;
use strict;

use Number::Format qw(format_bytes);
print format_bytes(1024), "\n";
print format_bytes(2535116549), "\n";
Run Code Online (Sandbox Code Playgroud)

输出:

1K
2.36G
Run Code Online (Sandbox Code Playgroud)