perl equivalente de sh -e

5

Em /bin/sh e /bin/bash (e acho que muitos outros shells), iniciar scripts com #!/bin/sh -e (ou executar set -e em algum lugar no script) faria com que o script fosse abortar quando qualquer linha de comando dentro do script sai com um código de status diferente de 0.

Existe algum equivalente ou solução alternativa para obter o mesmo comportamento em um script perl? (ou seja, se alguma instrução gerar um erro ou se algum comando externo executado com system(...) ou backticks retornar o código de erro, saia imediatamente)

    
por Carlos Campderrós 01.03.2012 / 17:49

1 resposta

8

Veja o módulo principal autodie . Isso substitui as chamadas como open e fork pelas funções que morrem em caso de falha. Para fazê-lo funcionar com system , você precisa importar :all ou :system , já que o padrão não faz isso.

use strict;   #always!
use warnings; #always!
use autodie qw(:system);

system('/bin/false'); #This will die
print "This will never be printed\n";

É importante observar que, para autodie trabalhar com system , você precisa do módulo IPC::System::Simple . Instale-o com o CPAN, ou no Ubuntu você pode sudo apt-get install libipc-system-simple-perl .

    
por 01.03.2012 / 18:11