
Bash, you could use type -a procheck to see what it actually runs and if there are other alternatives, like a disk file masked behind an alias. If it's just a regular executable, it would be in the PATH, which should be inherited to Perl and the subshell. Though if running it on an interactive shell works, it's possible that procheck is actually an alias or a function. The solution to that is to give the full path to the program, or make sure it's in the scripts PATH. But then you're likely get a warning from Perl about not being able to find procheck. If we change the quotes to double-quotes, the variable gets expanded by Perl (which is probably what you want, since you're using that variable in the loop). But that doesn't matter much, since the shell can't even seem to find the program procheck in the PATH. Unless your environment contains the variable proc, that will expand to nothing.

Since it contains a character special to the shell (the $), Perl runs the command through the shell, so the shell gets a chance to expand that. First, with the single-quoted string, the variable is not expanded, so the system() call sees the literal string procheck $proc 2.0. There are two things that might be issues here.
