O uso da associação de arquivos passa por um processo shell para avaliar o tipo de arquivo (extensão) e iniciar o processo apropriado. Você provavelmente está sobrecarregando isso. Isso é semelhante a como você obtém seu editor registrado ao invocar um .txt. Veja também ShellExecute.
Invocar diretamente o executável corta o intermediário e sempre seria o preferido.
O comentário de Uslackr sobre sua pergunta original também está correto, e ele observa que o executável perl no caminho do sistema é invocado. É melhor especificar diretamente o executável que você deseja executar por um caminho completo para evitar que outro executável seja invocado acidentalmente. Isso é bom tanto para confiabilidade quanto segurança. A portabilidade é sacrificada, mas você pode escolher suas prioridades.