Hashes in perl are called hashes because they store the data in a hash table. Hash tables use a hash function to calculate a key based on the value you give it and allow for fast searches at the expense of memory.
Using your example, say the hash table has 26 entries, and the hash function uses the first letter (case insensitive) to determine where to put each item in the table. So the hash table would look something like:
0: 'aligarh'=>'56'
1: 'bangalore'=>'20'
2:
3:
...
12: 'Mumbai'=>'23'
...
15: 'pune'=>'45'
...
25:
The insertion order will not affect the order in the hash table, otherwise there would be no way to look up a value later without knowing when it was inserted. Thus, no matter what order you insert items into the hash, the hash table will end up in the same state. In real-world uses, the hash function is more complicated to reduce collisions (two keys being put in the same slot).
So, to answer your question "if I want to print the values in order as I defined in hash, how to do that?", the answer is that you can't without using something besides just the hash (either an array, or some other variable keeping track of insertion order, or maybe by reading in your perl file and parsing it if you're really looking for a fun way to do it.)
For a much longer, and likely better explanation,
wikipedia[
^] is always a place to start.