Perl Brasil

Pesquisar

Documentação

Artigos

Planeta

Eventos


FISL 10 - Software Livre, a tecnologia que liberta

Comunidade

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 produzem

voltar para o topo


SINOPSE

    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");

voltar para o topo


DESCRIÇÃO

As rotinas oferecidas pelo Carp são úteis em seus módulos porque eles agem como die() 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:

  1. Toda chamada de um pacote para ele mesmo é segura.

  2. 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.

  3. 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''.

  4. 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.)

  5. 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.

voltar para o topo


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 de Carp. 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 valor 0 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 valor 0 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 valor 0 para mostrar todos os argumentos utilizados na chamada da função. O padrão é 8.

$Carp::Verbose

Esta variável faz Carp 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.

voltar para o topo


BUGS

As rotinas Carp não tratam objetos de exceção. Caso sejam chamadas com uma referência como primeiro argumento, elas simplesmente executarão die() ou warn(), apropriadamente.

voltar para o topo


TRADUÇÃO

Igor Sutton Lopes <igor@izut.com>

voltar para o topo