in reply to Data Structs

Sounds like you need a tree data structure. I'd stick with the hash thing, and make a key called 'dependencies' that points to an anonymous hash. In that second hash, the key would be the dependency name, and the value would be a reference to the dependency hash.

You'll have to figure out some way to add the references as you add dependencies. Keep another hash around with needed dependencies as keys, and as values, an anonymous array of references to objects that depend on them. (Is this starting to hurt your head yet?) When you add a new file, look to see if it can be added to those hashes.

Once you've added all the files, iterate through the hashes, sorting them by least number of dependencies.

You could also, in step two, record *which* dependencies a file fulfills, and build an inverted tree.

I'd use objects in this case. It'd simplify things like linking.