my $field_index = $position{$field}; if ("text" eq $type{$field}) { if ("asc" eq $order{$field}) { push @sort_sub, sub ($$) { $_[0][0][$field_index] cmp $_[1][0][$field_index]; }; } else { push @sort_sub, sub ($$) { $_[1][0][$field_index] cmp $_[0][0][$field_index]; }; } } else { if ("asc" eq $order{$field}) { push @sort_sub, sub ($$) { $_[0][0][$field_index] <=> $_[1][0][$field_index]; }; } else { push @sort_sub, sub ($$) { $_[1][0][$field_index] <=> $_[0][0][$field_index]; }; } }