#! /usr/bin/perl -w ## not very scalable; stores entire document in memory use strict; use List::Util qw[min max]; main:{ ## leftmost column is column ZERO my @cwid = (); # width of column my @store = (); while (my $line = <>){ chomp $line; my @stuff = split(' ', $line); for (my $ii = 0; $ii < 0+@stuff; $ii++){ my $old = $cwid[$ii] || 0; $cwid[$ii] = max(length($stuff[$ii]), $old); } push @store, \@stuff; } foreach my $line (@store) { my @stuff = @$line; for (my $ii = 0; $ii < 0+@stuff; $ii++){ if ($ii) { print " "; } printf("\%-$cwid[$ii]s", $stuff[$ii]); } print "\n"; } }