CVS itself offers some features to deal with this. A bit dangerous in this forum, but Perl may not be the Right Thing here.
in reply to Adding/Committing Files to CVS
Instead, I strongly recommend taking a good hard look at the cvs import subcommand, which is a sort of sophisticated recursive cvs add, and reading the documentation for CVS to see how to use its configuration file to skip files.
In summary, since CVS already handles this it might be a Bad Idea to write your own recursive add routines.