Dmitry Karpich++
В общем Дмитрий, думаю, этот вариант наикратчайший, даже лучше, чем 
инициализация хэша рангов
use Smart::Comments;
my %rang;
@rang{qw( P T G M K)} = ( 0 .. 5 );
### %rang

и регулярное выражение ([\d.]+) эквивалентно (\d+(?>\.\d+)?) клево

и он короче 
du -h | perl -e 'print 
map{$_->[0]}sort{$b->[2]<=>$a->[2]||$b->[1]<=>$a->[1]}map{$_->[2]=~ 
tr/kKMGT/00123/,$_}map{[$_,/([\d.]+)(\w)/]}<>'
du -h | perl -e'%hc=map{$_,$a=$a?$a*1024:1}qw(K M G T);print map 
$_->[1],sort{$b->[0]<=>$a->[0]}map{/^(\d+(?>\.\d+)?)(\w?)/;[$1*$hc{$2},$_]}<>'

на 6 байт варианта, предложенного       Denis Evdokimov, хотя у него тоже 
хороший вариант
а главное решение Karpich размером 137 байт влезло в твиттер (max 139) !!



29.09.2011, 03:48, "Dmitry Karpich" <[email protected]>:
> Если perl ниже 5.14.0 и не понимает /r
>
> #!/bin/sh
> du -h |
> perl -e '
>         print
>                 map { $_->[0] }
>                 sort { $b->[2] <=> $a->[2] || $b->[1] <=> $a->[1] }
>                 map { $_->[2]  =~ tr/kKMGT/00123/, $_ }
>                 map { [ $_, /([\d.]+)(\w)/ ] }
>                         <>
> ' $*
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org

--
Nikolay Mishin
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить