A module file with all the subroutines, while each sub just return true/false for the corresponding software check it performs.
So you want to have a subroutine
per potentially installed software package? What about software that's installed, but you don't think to include it in your module? Is it acceptable to only find one-way deltas?
Forgive my pessimism, but that's a disaster. It'll be run forever, but only updated a couple times. And your versions won't be consistently updated across all your servers. Your admin staff will soon replace it, but won't bother turning it off.
You could write a subroutine that's a subroutine factory: creating subroutines for each package on-the-fly, based on some constantly updated master list... presumably a DB table. That would work a lot better, be much more flexible, and stand some chance of being maintained. But it still leaves the problem of one-way deltas.