Windows (and DOS and OS/2) accepts a forward slash as path separator, there is no need for $separator. If you want true multi-platform code, use File::Spec, which also handles classic MacOS and more exotic platforms.
$^O is never MSWin. It may be MSWin32 or perhaps MSWin64.
readFiles() is a bad name, as this function does not read files. It reads directories and print file names found there matching a hardcoded regular expression.
The function should really return a list of file names instead of printing them.
Recursion is not needed here, you could use a simple worklist (array) instead, containing directories to be processed.
Because you use a global directory handle (sDir) instead of a local handle (my $dir) or at least a localized handle (local *sDir), every recursion will automatically close and re-open the handle. Your code only works by accident, because you used for (readdir(sDir)) instead of while (defined($_=readdir(sDir))), reading the entire directory list into memory before iterating over it. Still, each and every call to closedir except for the first one will fail with "Bad file descriptor".
There is no need to reinvent directory tree walkers, there are several on CPAN that do not pollute namespaces, that properly check for errors, that work cross-platform, and that do not slurp everything into memory. And, of course, they have parameters allowing to customize the search.
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)