Existem duas coisas que podem ser problemas aqui. Primeiro, com a sequência de aspas simples, a variável não é expandida, portanto, a chamada system() vê a string literal procheck $proc 2.0 . Como contém um caractere especial para o shell (o $ ), o Perl executa o comando através do shell, para que o shell tenha a chance de expandi-lo. A menos que seu ambiente contenha a variável proc , isso se expandirá para nada. Mas isso não importa muito, já que o shell nem parece encontrar o programa procheck no PATH . Ele reclama disso.
Se alterarmos as aspas para aspas duplas, a variável será expandida por Perl (que é provavelmente o que você deseja, já que você está usando essa variável no loop). Mas é provável que você receba um aviso do Perl sobre não conseguir encontrar procheck .
A solução para isso é fornecer o caminho completo para o programa ou certificar-se de que ele esteja nos scripts PATH .
Embora se executá-lo em um shell interativo funciona, é possível que procheck seja, na verdade, um alias ou uma função. Se for apenas um executável comum, ele estará no PATH , que deve ser herdado para o Perl e o subshell. Em p.ex. Bash, você poderia usar type -a procheck para ver o que realmente é executado e se há outras alternativas, como um arquivo de disco mascarado atrás de um alias.
Ah, também, se você não precisar do shell ao executar o comando, poderá evitar que o Perl o chame acidentalmente usando o formulário de lista de system e fornecendo os argumentos para o comando como argumentos separados para% código%. Aqui, isso seria system .