in reply to multi-command sytem call

What tilly and Zaxo have said is correct, you get the return staus of a shell. You're calling perl "foo&", and that's a shell syntax for running a process in the background. Only in special cases does system run things directly from perl and bypass the shell, this is not one of them.

That said, the problem at hand can be solved in a few ways. One is the double open as tilly suggested. Another, more complicated, is to use fork and exec yourself. A third would be to use short-circuting in your system call, something like

system(q(fred & barney || true ));
Which means
run fred in the background, and then try to run barney (no need to background barney and it wouldn't allow the trick anyhow). If barney exits with 0 status echo runs and we have successful termination indicated by true's return value of 0.
Use true, false, && and || as necessary to achieve the desired results.

UPDATE: You shouldn't even need the logic actually, you can twiddle the return code as needed within perl itslef. In short, loose the second ampersand :-P.

--
I'm not belgian but I play one on TV.