in reply to newbie question on HoH manipulation

You could name your temporary variables $city, $code, $hour, $reason. Or $tmp_key_city if you like. I think $key and $val don't say enough when you try to understand the program for the first time.

About " @holdval = keys %{$$switch_hash{$key}}" this might work:

@holdval = keys %{$val};