My initial suspicion was that this had to do with the imports, if only because this module does something different than the vanilla use and Exporter stuff. Sure enough,
the documentation for the module which does the actual work of loading other modules (
Module::Load) states the following:
Module::Load cannot do implicit imports, only explicit imports. (in other words, you always have to specify explicitly what you wish to import from a module, even if the functions are in that modules' @EXPORT)
Therefore, for you to have access to
decode_base64, you have to
explicitly specify that you want that sub imported from MIME::Base64. Unfortunately, the code which does the load in Module::Load::Conditional doesn't specify any explicit exports, and it isn't structured to allow this (see line 481 of the
source of Module::Load::Conditional):
eval { load $mod };
The explicit imports would be a second argument to
load, but none is passed here. Therefore, this solution as it stands won't work for you. You'll either need to patch the module to support explicit exports, submit the bug to the module maintainer, or use the fully qualified sub name
MIME::Base64::decode_base64 in your code.