Consider a Makefile.PL like this where you want to build, test and install the distributions alpha & beta at the same time
WriteMakefile( NAME => "whatever", VERSION => '1.0', DIR => [ "alpha", "beta" ], ); The "test" target created by that on a Unix-ish platform looks like this test :: $(TEST_TYPE) $(NOECHO) $(ABSPERLRUN) -e 'chdir '\''alpha'\''; ' \ -e 'system '\''$(MAKE) test $(PASTHRU)'\''' \ -e ' if -f '\''$(FIRST_MAKEFILE)'\'';' $(NOECHO) $(ABSPERLRUN) -e 'chdir '\''beta'\''; ' \ -e 'system '\''$(MAKE) test $(PASTHRU)'\''' \ -e ' if -f '\''$(FIRST_MAKEFILE)'\'';' The problem with that code is that if there is a failure in one of the tests, the status will never work its way back to the shell. A quick hack, changing -e 'system '\''$(MAKE) test $(PASTHRU)'\''' \ to -e '(system '\''$(MAKE) test $(PASTHRU)'\'' and exit 1 )' \ sorted the problem for me. Paul