DBIx::ProcedureCall needs to know if you are about to call a function or a procedure (because the SQL is different). You have to make sure you call the wrapper subroutines in the right context:
You have to call procedures in void context.
You have to call functions in non-void context.
If you do not want to rely on this mechanism, you can declare the correct type using the attributes :procedure and :function:
If you use these attributes, the calling context will be ignored and the call will be dispatched according to your declaration.use DBIx::ProcedureCall qw[ sysdate:function dbms_random.initialize:procedure ];