|Welcome to the Monastery|
"That means you wouldn't use Test::More to check every possible outcome of a subroutine but only a a few specific tests to make sure the program is running correctly. Is this the correct approach or am I completely wrong?"
It is the start to some kind of a correct approach. The point of math proofs is that you don't have to show every value of X or Y, etc. You can treat unit testing the same way with a few caveats, the main one being bug fixes. When someone reports a bug, write (add) a unit test to recreate the bug. The test should fail. Fix the bug. Include the bug report number in the name of the test.
The flip side is writing too many tests, especially if they take too long to run. Developers will stop running them and they will go to the weeds, becoming a hindrance. You have to keep your unit tests current and they need to finish in a timely manner.
"Also, what would be the best method for automatic testing of scripts we use? "
I have my own personal Jenkins server that i use to test and build my distributions. I also use github and travis-ci which are free services. The gist is you use github as a repository for you code and travis-ci to build and test. Hope this helps. :)
L-LL-L--L-LL-L--L-LL-L-- -R--R-RR-R--R-RR-R--R-RR B--B--B--B--B--B--B--B-- H---H---H---H---H---H--- (the triplet paradiddle with high-hat)