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";