I see a couple of issues here:
- pryrt pointed out that you're using eval BLOCK syntax with a single string inside the block, that's basically like writing "use cPanelUserConfig;" in your code, i.e. it has no effect, and warnings would have told you "Useless use of a constant ("use cPanelUserConfig;") in void context". Always Use strict and warnings!
- haj pointed out that unless($@){use cPanelUserConfig} will always attempt to load the module. There's the if.pm pragma, but in this case a simple eval "use cPanelUserConfig;" (that's an eval STRING) would be enough to either load the module or not.
- The pattern of checking $@ after an eval is unfortunately common, but it has issues: Bug in eval in pre-5.14.
All in all, since it sounds like you only need to load the module or not, and not actually use any of its functions (?), I would have gone with: eval "use cPanelUserConfig; 1" or warn "Didn't load cPanelUserConfig: $@";.