my @multi_field_data_array = (); my %data_1_hash = (); $data_1_hash{"name"} = "oda"; $data_1_hash{"height"} = 170; $data_1_hash{"weight"} = 50; my %data_2_hash = (); $data_2_hash{"name"} = "kato"; $data_2_hash{"height"} = 180; $data_2_hash{"weight"} = 80; my %data_3_hash = (); $data_3_hash{"name"} = "sasaki"; $data_3_hash{"height"} = 150; $data_3_hash{"weight"} = 70; my %data_4_hash = (); $data_4_hash{"name"} = "nomura"; $data_4_hash{"height"} = 140; $data_4_hash{"weight"} = 70; push(@multi_field_data_array, \%data_1_hash); push(@multi_field_data_array, \%data_2_hash); push(@multi_field_data_array, \%data_3_hash); push(@multi_field_data_array, \%data_4_hash); my @sorted = sort{ $b->{"weight"} <=> $a->{"weight"} || $b->{"height"} <=> $a->{"height"} } @multi_field_data_array; print("\n"); foreach(@sorted){ print($_->{"name"}."\t ".$_->{"weight"}."\t".$_->{"height"}."\n"); }