r2 - 02 Jul 2009 - RonaldoLima
NOME
carp - reclama de erros (da perspectiva da função que a chamou) cluck - reclama de erros com pilha de histórico erros (não é exportada por padrão) croak - sai do programa com erros (da perspectiva da função que a chamou) confess - sai do programa com erros, com pilha de histórico de erros shortmess - retorna a mensagem que carp e croak produzem longmess - retorna a mensagem que cluck e confess produzemSINOPSE
use Carp;
croak "We're outta here!";
use Carp qw(cluck);
cluck "This is how we got here!";
print FH Carp::shortmess("This will have caller's details added");
print FH Carp::longmess("This will have stack backtrace added");
DESCRIÇÃO
As rotinas oferecidas pelo Carp são úteis em seus módulos porque eles agem comodie() ou warn(), porém com uma mensagem que é mais útil para o usuário de seu módulo. No caso de cluck, confess e longmess, o contexto é um resumo de todas as chamadas da pilha de chamadas. Para uma mensagem mais curta você pode utilizar carp, croak ou shortmess, que informa o erro de onde o seu módulo foi chamado. Não há garantias que foi de onde o erro aconteceu, porém é um bom palpite.
Você também pode modificar o modo que a saída e a lógica do Carp funciona, alterando algumas variáveis globais no namespace Carp. Veja a seção VARIÁVEIS GLOBAIS abaixo.
Existe uma descrição mais completa de como shortmess funciona. O que ela faz é procurar na pilha de chamadas onde não foi dito que não poderia ser um erro. Se cada chamada é marcada como segura, o método então desiste e informa a pilha inteira. Em outras palavras, ela presume que a primeira chamada potencialmente suspeita é culpada. Suas regras, para informar que uma chamada não deveria gerar erros, funciona da seguinte maneira:
-
Toda chamada de um pacote para ele mesmo é segura.
Pacotes informam que não haverão erros em chamadas para ou de pacotes explicitamente marcados como seguros, incluindo-os em @CARP_NOT, ou (caso este array esteja vazio) em @ISA. A possibilidade de sobrescrever o conteúdo de @ISA é possível apenas na versão 5.8 do Perl.
A relação de confiança no item 2 é transitiva. Se A confia em B, e B confia em C, então A confia em C. Então, se você não sobrescrever @ISA com @CARP_NOT, esta relação de confiança é idêntica a ``herda de''.
Qualquer chamada de um módulo interno de Perl é segura. (Nada impede que módulos criados por terceiros sejam marcados como internos, porém esta prática é desencorajada.)
Qualquer chamada para Carp é segura. (Esta regra é o que a mantém de reportar um erro quando você chama carp/croak/shortmess.)
Forçando o Stack Trace
Como cuidado de debug, você pode forçar Carp a tratar croak como confess e carp como cluck em todos módulos. Em outras palavras, forçar para que o stack trace detalhado seja exibido. Isto pode ser muito útil para entender a razão, ou onde, está sendo gerado problema. Esta funcionalidade pode ser ativada importando o símbolo não existente 'verbose'. Você pode ativá-lo da seguinte maneira:
perl -MCarp=verbose script.pl
ou incluindo a string MCarp=verbose na variável de ambiente PERL5OPT? .
Uma alternativa seria atribuir um valor verdadeiro para a variável $Carp::Verbose. Veja a seção VARIÁVEIS GLOBAIS abaixo.
VARIÁVEIS GLOBAIS
$Carp::CarpLevel
Esta variável determina quantas chamadas deverão ser omitidas quando reportar onde um erro ocorreu, na chamada de uma das funções deCarp. Por exemplo:
$Carp::CarpLevel = 1;
sub bar { .... or _error('Wrong input') }
sub _error { Carp::carp(@_) }
Isto deverá fazer Carp reportar o erro como iniciando no chamador de bar, ao invés da perspectiva de _error, como ele normalmente o faria.
O padrão é 0.
$Carp::MaxEvalLen
Esta variável determina quantos caracteres devem ser mostrados. Utilize o valor0 para mostrar todo o texto.
O padrão é 0.
$Carp::MaxArgLen
Esta variável determina quantos caracteres de cada argumento de uma função deverão ser apresentados. Utilize o valor0 para mostrar todos os caracteres dos argumentos.
O padrão é 64.
$Carp::MaxArgNums
Esta variável determina quantos argumentos de cada função deverão ser apresentados. Utilize o valor0 para mostrar todos os argumentos utilizados na chamada da função.
O padrão é 8.
$Carp::Verbose
Esta variável fazCarp utilizar a função longmess todas as vezes. Isto significa que todas as chamadas para carp se tornarão cluck e todas as chamadas para croak se tornarão confess.
Note que isto é o mesmo que utilizar use Carp 'verbose'.
O padrão é 0.
BUGS
As rotinas Carp não tratam objetos de exceção. Caso sejam chamadas com uma referência como primeiro argumento, elas simplesmente executarãodie() ou warn(), apropriadamente.

