Durante a execução do programa, sempre serão encontrados diversos erros, como abrir um arquivo que não existe.
Se ocorrer um erro durante a execução do programa, ele será interrompido. Precisamos usar alguns métodos de detecção para evitar erros e impedir a saída do programa.
Perl fornece vários métodos para lidar com erros e iremos apresentá-los um por um a seguir.
A instrução if pode determinar o valor de retorno da instrução. Os exemplos são os seguintes:
if(open(DATA, $file)){ ...}else{ die "Erro: Não foi possível abrir o arquivo - $!";}
A variável $! no programa retornou uma mensagem de erro. Também podemos simplificar o código acima para o seguinte código:
open(DATA, $file) || die "Erro: Não foi possível abrir o arquivo - $!";
A função except é o oposto de if e só será executada quando a expressão retornar false, conforme mostrado abaixo:
except(chdir("/etc")){ die "Erro: Não é possível abrir o diretório - $!";}
A instrução except é muito útil quando você deseja definir um lembrete de erro. Também podemos abreviar o código acima como:
die "Erro: Não é possível abrir o diretório!: $!" a menos que(chdir("/etc"));
A mensagem de erro acima só será exibida quando houver um erro na troca de diretório.
A seguir está um exemplo simples do operador ternário:
print(existe($hash{valor}) ? 'Existe' : 'Não existe',"n");
No exemplo acima, usamos o operador ternário para determinar se o valor hash existe.
O exemplo contém uma expressão com dois valores, no formato: expressão valor um: valor dois .
A função de aviso é usada para acionar uma mensagem de aviso. Nenhuma outra operação será executada. Ela é enviada para STDERR (arquivo de saída padrão).
chdir('/etc') ou warning "Não é possível alternar diretórios";
A função die é semelhante a avisar, mas existe. Geralmente usado como saída de mensagens de erro:
chdir('/etc') ou die "Não é possível mudar de diretório";
Em scripts Perl, uma maneira comum de relatar erros é usar as funções warning() ou die() para relatar ou gerar erros. Para o módulo Carp, pode fornecer um nível adicional de controle sobre as mensagens geradas, especialmente dentro do módulo.
O módulo Carp padrão fornece alternativas às funções warning() e die() que são mais informativas e fáceis de usar no fornecimento de localização de erros. Quando usado em um módulo, o nome do módulo e o número da linha são incluídos na mensagem de erro.
A função carp pode gerar informações de rastreamento do programa, semelhante à função de aviso, e geralmente envia essas informações para STDERR:
pacote T;require Exportador;@ISA = qw/Exportador/;@EXPORT = qw/função/;use Carp;sub função { carp "Erro no módulo!";}1;
Chame o seguinte programa no script:
usar T;função();
Executando o programa acima, o resultado de saída é:
Erro no módulo! na linha 4 do test.pl
cluck() é semelhante a warning() e fornece um rastreamento de pilha de onde o erro ocorreu.
pacote T;require Exportador;@ISA = qw/Exportador/;@EXPORT = qw/função/;use Carp qw(cluck);sub função { cluck "Erro no módulo!";}1;
Chame o seguinte programa no script:
usar T;função();
Executando o programa acima, o resultado de saída é:
Erro no módulo! na linha 9 do T.pm T::function() chamado na linha 4 do test.pl!
croak(), assim como die(), encerra o script.
pacote T;require Exportador;@ISA = qw/Exportador/;@EXPORT = qw/função/;use Carp;sub função { coaxar "Erro no módulo!";}1;
Chame o seguinte programa no script:
usar T;função();
Executando o programa acima, o resultado de saída é:
Erro no módulo! na linha 4 do test.pl
confess() é semelhante a die(), mas fornece um rastreamento de pilha de onde o erro ocorreu.
pacote T;require Exportador;@ISA = qw/Exportador/;@EXPORT = qw/função/;use Carp;sub função { confessar "Erro no módulo!";}1;
Chame o seguinte programa no script:
usar T;função();
Executando o programa acima, o resultado de saída é:
Erro no módulo! na linha 9 do T.pm T::function() chamado na linha 4 do test.pl!