大佬教程收集整理的这篇文章主要介绍了解释Perl代码以KB,MB,GB等显示多个字节,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
$_->[1],$_->[0]
是不是传递给地图只是一个哈希数组?那么如何才能有0和1指数呢?
sub fmt { my $bytes = shift; return ( sort { length $a <=> length $b } map { sprintf '%.3g%s',$BYTES/1024**$_->[1],$_->[0] } [" bytes"=>0],[KB=>1],[MB=>2],[GB=>3] )[0]; }
传递给map的列表是:匿名数组列表
[ " bytes" => 0 ],[ KB => 1 ],[ MB => 2 ],[ GB => 3 ]
而胖逗号运算符=>通常在哈希文字的上下文中看到,这并不是它的全部好处.它与普通逗号相同,只是将隐含引用裸字左手操作数.没有它,列表将是相同的
[ ' bytes',0 ],[ 'KB',1 ],[ 'MB',2 ],[ 'GB',3 ]
这是相同的函数,中间映射语句的结果扩展为一个单独的数组@variations,我使用Data :: Dump转储它以显示它正在做什么
传递给map的列表是一些匿名数组 – 每个数组都包含后缀字符串以及该字符串对应的1024的相应功率. return语句只选择最短的表示
use Strict; use warnings 'all'; use feature 'say'; use Data::Dump; say fmt(987 * 1024**2); sub fmt { my $bytes = shift; my @variations = map { sprintf '%.3g%s',$BYTES/1024 ** $_->[1],$_->[0] } [ " bytes" => 0 ],[ GB => 3 ]; dd \@variations; return ( sort { length $a <=> length $b } @variations ) [0]; }
产量
["1.03e+009 bytes","1.01e+006KB","987MB","0.964GB"] 987MB
我通常使用类似的东西. sprintf的滑稽动作是确保永远不会显示一个字节的分数
sub fmt2 { my ($n) = @_; my @suffix = ( '',qw/ K M G T P E / ); my $i = 0; until ( $n < 1024 or $i == $#suffix ) { $n /= 1024; ++$i; } sprintf $i ? '%.3g%sB' : '%.0f%sB',$n,$suffix[$i]; }
以上是大佬教程为你收集整理的解释Perl代码以KB,MB,GB等显示多个字节全部内容,希望文章能够帮你解决解释Perl代码以KB,MB,GB等显示多个字节所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。