in reply to "do" what?

Two observations. First, check $! after the 'do' statement and make sure that the file is indeed being loaded.

Second, inspect config.cgi and ensure that there are no package statements that could be defining %config in a different namespace.

Matt

Update: runrig has it right in this case; the static my %config is not visible in from the point of view of config.cgi; this static %config is therefore masking the global %config variable visible from the do block.