You should not be using qw in the system call. Take it out.
Try this, to see why:
print "$_\n" for qw "perl /Users/james/perlstuff/macc/macc1 $file";
You might have other problems with that program as well.
For starters, you should probably chomp($file) immediately after reading it in.
Also, you're opening the file for reading, then immediately passing the filename
to an external program. I really don't think you want to do both. You certainly
don't need to open a file before passing it to an external program; that
program will do what it wants with the name, and wouldn't see your open filehandle
Thirdly, you're pulling in the Shell module, but not using it.
You could use it, by doing this:
use Shell qw( perl );
. . .
perl "/Users/james/perlstuff/macc/macc1", $file;
A word spoken in Mind will reach its own level, in the objective world, by its own weight