Я бы решил эту проблему, просто поместив все подпрограммы в один файл и переименовав все конфликтующие.
Однако, похоже, ваша проблема в том, что вы жестко программируете все возможные ситуации проверки, с которыми вы можете столкнуться. Лучший способ - создать процесс, в котором вы можете динамически создавать конвейеры проверки. Поскольку я не знаю, что вам нужно, я не знаю, подойдет ли вам что-то вроде Data :: Constraint или другие модули проверки. Очень сложно дать какой-либо полезный совет с таким небольшим количеством информации в вопросе.