listing a directory by size



For the following program, found somethings seem not seen before, one
is the input <*>, everything and anything? Another is the usage
$i{$f} or $i{$b}, etc., not sure what that means?

foreach $f (<*>) ( $i{$f} = -S $f };
foreach $k (sort{ $i{$b} <=> $i${a} } keys %i}
{ printf "%8d %s\n", $i{$k}, $k }

Any guru can explain? Thanks!
.