What do you mean by "pick up", that both -f and -d are false? What is join(':',stat $_)?
You don't show the code that sets @files; a common mistake in directory recursion is forgetting to add the directory to the beginning of the path. There are other common problems too; you really should use one of the File::Find modules for this.