UPDATE: Wow, I start my response when there are no others, walk away for a second and 2 people submit before me....and unbelievably, noone else says to turn on warnings or to use strict! ;-)
First off, try turning warnings on
#!/usr/bin/perl -w and also always
use strict;
That should be on anyway... but if you are having problems it can help find the location.
your line
foreach my $child (keys($tables{$table})) shouldn't work. you can't call
keys on a hash if you are actually calling a value out of the hash. try
foreach my $child (keys(%tables))
you also have references to other variables
foreach my $parent (@{$parents{$table}}) that we can't see where you are generating these variables.... Try posting more of the code. If it is long, use readmore tags.
-Kevin
my $a='62696c6c77667269656e6440676d61696c2e636f6d';
while ($a=~m/(^.{2})/s)
{print unpack('A',pack('H*',"$1"));$a=~s/^.{2}//s;}