my $mysortref = sort_maker( sub { lc($data{$a}[0]) cmp lc($data{$b}[0]) }, sub { lc($data{$a}[1]) cmp lc($data{$b}[1]) }, ); @results = sort $mysortref (keys %data); print "@{$data{$_}}\n" for (@results); sub sort_maker { my @littlesubs = @_; sub { foreach my $sub (@littlesubs) { my $result = $sub->(); return $result if $result; } }; } #### HERNANDEZ HECTOR 456791 SAMSON 0217 2001-07-25 1963-08-01 VASQUEZ JOAQUIN 456789 SAMSON 0209 1990-11-14 1970-03-25 JONES TIMOTHY 803092 LAVER 0103 2001-03-19 1969-06-29 SMITH BETTY_SUE 698389 SAMSON 0211 1992-01-23 1949-08-12 #### lastname firstname cno unit ward dateadmission datebirth #### my %parameters = ( lastname => [ qw( U a ) ], firstname => [ qw( U a ) ], cno => [ qw( U n ) ], unit => [ qw( U s ) ], ward => [ qw( U n ) ], dateadmission => [ qw( D a ) ], datebirth => [ qw( D a ) ], ); #### my $results_ref = $dp->sort_by_column( qw{ lastname firstname cno } ); #### sub { lc($data{$a}[0]) cmp lc($data{$b}[0]) },