We use multiple perl scripts to do the job: one to build the C++ code, one to run the C++ white box regression tests, one (Test::Harness prove) to run the Perl white box regression tests, another to run the black box regression tests, and so on. Writing each script as a stand-alone tool has proved useful because developers can use them standalone, plus the same tool can be called from the high level nightly smoker script.
We don't do continuous builds. We do complete builds and regression tests nightly. This is mainly because we support a dozen or so different platforms from a single source code base. We use rsh to control running the nightly smoker across the many build and test machines.