Given your constraint (changing the system clock is not an option), I'd set myself up with a subroutine that I called every-time I needed to refer to the clock. A little bit of Getopts::Std to let me pass a parameter in from the command line, and I can set the subroutine to return anytime I like.
Well, that's sorta like what I was thinking.. The problem is that I can't make something like mytime() and replace throughout the code because A> waaaay too many to replace, and B> it's an internal codebase change. The testing system has to fake the time externally to validate the code, otherwise it would be modified again when I take out the test..
My first thought was to try using something like this: