in reply to randomly generating A-Za-z

This does the job:

$ perl -e '@c=(A..Z,a..z);print $c[rand(scalar@c)|0]' F$

Update: To keep your subs and make it strict:

sub letter { ('A'..'Z','a'..'z')[rand(52)] } sub city { join '', map {letter()} 1..10 + int rand 30 }
It would be fun to scan the zipcode db for character or digraph frequencies to make the dummy names more plausible.

After Compline,
Zaxo