my @values = @hash{ sort { $a <=> $b } keys %hash }; #### %hash = (); @hash{ 0..@values-1 } = @values; #### @hash{ keys(%hash), 0..keys(%hash)-1 } = ((undef) x keys(%hash), @hash{ sort { $a <=> $b } keys %hash }); delete @hash{ grep !defined $hash{$_}, keys %hash }; #### @hash{ 0..keys(%hash)-1 } = delete @hash{ sort { $a <=> $b } keys %hash };