foreach $line (sort(sort_func &read_file("DATAFILE"))) close(DATAFILE); sub sort_func { #local($a, $b) = @_; my(@a_items) = split("\t", $a,$datafields); my(@b_items) = split("\t", $b, $datafields); my($item_no) = $sort; # the number of the field to # sort on. my($result) = 0; # default is equal if ($sortby eq "string"){ $result = $a_items[$item_no] cmp $b_items[$item_no]; } elsif ($sortby eq "number"){ $result = $b_items[$item_no] <=> $a_items[$item_no];} # for numbers return($result); } sub read_file { my ($filevar) = @_; <$filevar>; }