in reply to Having a problem with do

My guess is that since "return %config" is a nonsensical statement there (since you're not in a subroutine) the return value if do "../config.cgi" will always be an empty list.

Also, you're assigning to %config 3 times. You could just remove config.cgi and do

our %config; do "../filename" or die "can't read config file";