And here's mine, which again cycles to pick the max number of columns possible. Note that both width and spacer width can be specified.
use strict; my $width = 80; my $spacer = 2; my @files = sort(split(/\s+/, join('', <DATA>))); my ($pl, $c, $i, $j, $max, $total, @max, @sorted); while () { $pl = ($#files + 1) / ++$c; $pl = int $pl + 1 if $pl != int $pl; $total = 0; for ($i = 0; $i < $c; $i++) { $max = 0; for ($j = 0; $j < $pl; $j++) { $max = length($files[$i*$pl+$j]) if $max < length($files[$i*$pl+$j]); } $total += $max + $spacer; } last if ($width < $total - $spacer); } $pl = ($#files + 1) / --$c; $pl = int $pl + 1 if $pl != int $pl; for ($i = 0; $i < $c; $i++) { $max = 0; for ($j = 0; $j < $pl; $j++) { $sorted[$j][$i] = $files[$i*$pl+$j]; $max = length($files[$i*$pl+$j]) if $max < length($files[$i*$pl+$j]); } $max[$i] = $max + $spacer; } $max[$#max] -= $spacer; for (@sorted) { $c = 0; print sprintf('%-'.$max[$c++].'s', $_) for (@$_); print "\n"; } __DATA__ B Digest Filter MIME SDBM_File Time util ByteLoader DynaLoader GDBM_File NDBM_File Safe Unicode Cwd Encode I18N ODBM_File Socket XS DB_File Errno IO Opcode Storable attrs Data Fcntl IPC POSIX Sys re Devel File List PerlIO Thread threads

In reply to Re: 'ls -C' column style by TedPride
in thread 'ls -C' column style by hv

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.