#!/usr/local/bin/perl sub sbl { length($b) <=> length($a); } while (<>) { push(@last, /(\S+)\s*$/); push(@lines, $_); # if 30 < length; } print @lines[sort { $last[$a] cmp $last[$b] } 0 .. $#lines];