#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; use Array::Transpose; my @array = ( ['X1','X2','X3','X4' ], ['','foo','',''], ['','bar','',''], ['','rat','',''], ['me','','',''] ); my @at = transpose (\@array); my @condensed; for my $row (@at) { my @shortrow = sort { (length ($b) > 0 <=> length ($a) > 0) } @$row; push @condensed, \@shortrow; } @array = transpose (\@condensed); print Dumper \@array;