suppose I have a hash like

     %users =(
          'cvs' => {
                       'uname' => 'cvs',
                       'uid' => 582,
                       'gid' => 500
                     },
            'radvd' => {
                         'uname' => 'radvd',
                         'uid' => 75,
                         'gid' => 75
                       },
            'goofy' => {
                         'uname' => 'goofy',
                         'uid' => 515,
                         'gid' => 515
                       },
                 );

Now I want to sort on either of the fields 'uname' 'uid' 'gid'
and ascending or descending Then my sort function is pretty repitive code. I have to check if the field is numeric or not and then if the sorting is ascending or descending.


assume $hash = \%users;
......
if($sortkey eq 'uname'){
if($direction eq 'a'){
@allunames = sort{ $$hash{$a}{$sortkey} cmp $$hash{$b}{$sortkey} } keys %hash;
} else {
@allunames = sort{ $$hash{$b}{$sortkey} cmp $$hash{$a}{$sortkey} } keys %hash;
}
} else {
if($direction eq 'a'){
@allunames = sort{ $$hash{$a}{$sortkey} <=> $$hash{$b}{$sortkey} } keys %hash;
} else {
@allunames = sort{ $$hash{$b}{$sortkey} <=> $$hash{$a}{$sortkey} } keys %hash;
}
}
..............


Can someone suggest a better way.
Thanks
Ram



--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to