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
.