"perl Makefile.PL < /dev/null" works for us. We encapsulate it in a macro (see below).
Now why didn't I think of that? :). This works nicely. We still ahve to patch some of the individual Makefile.PL's, but that is acceptable (some of them have "exit;" at the end of them for example which causes the Makefile generation to stop :)). We use a vendor branch to import the new versions of modules as we update, and CVS handles this fairly well.
Mike