in reply to 2 dimensional array sorting...

Why don't you use the name as the key? That way you won't have duplicate keys in your hash. Then you have to options to keep the sort order. Create a array of ProductTypeName in the right order, or create index hash with order number as the key and ProductTypeName as the other element.
For instance, let's call the first hash PTypeNumber and the second PTypeName, so you can print the same table above as:
PTypeName{0}='corkscrews'; {...} PTypeNumber{'corkscrews'}=0; {...} for (i=0;i<16;i++){ print "PTypeNumber{PTypeName{i}}, PTypeName{i}\n"; }
Not anything fancy, but it works.