a($_) while ; for (sort keys %h){ print "$_: my address is $h{$_}\n"; print "last: $h{$_}{'a'} >>> $h{$_}{'a'}{'c'}\n"; print "next: $h{$_}{'b'} >>> $h{$_}{'b'}{'c'}\n\n"; } sub a { chomp; $t = shift; $h{$t}{'a'} = $l; $h{$t}{'c'} = $t; $$l{'b'} = $h{$t}; $l = $h{$t}; } __DATA__ a b c d e #### a: my address is HASH(0x2b230) last: >>> next: HASH(0x22e44e8) >>> b b: my address is HASH(0x22e44e8) last: HASH(0x2b230) >>> a next: HASH(0x22e45d8) >>> c c: my address is HASH(0x22e45d8) last: HASH(0x22e44e8) >>> b next: HASH(0x22ef2a0) >>> d d: my address is HASH(0x22ef2a0) last: HASH(0x22e45d8) >>> c next: HASH(0x22ef468) >>> e e: my address is HASH(0x22ef468) last: HASH(0x22ef2a0) >>> d next: >>>