Perl Advent Calendar 2006-12-10

Vovó foi atropelada por uma rena

por Jerrad Pierce

Papai Noel pode ser alegre, mas ele também é bastante rígido. O bom velhinho ficou bastante satisfeito quando descobriu um módulo que o ajuda a trabalhar com código que não está de acordo com as boas práticas. Melhor ainda, é parte da distribuição principal da linguagem. Através da adição de uma fina camada de código, o módulo Fatal induz todas as subrotinas e funções que, normalmente, retornariam um valor falso quando um erro ocorreu a lançarem uma exceção. Esta prática traz vários benefícios incluindo propagação de erros e a possibilidade de compensar a falta de tratamento de erros em bibliotecas que não estão sob seu controle. Infelizmente, a versão atual (1.03) acaba com este último benefício, como foi notado na lista p5p (link em inglês). O patch oferecido na mensagem está disponível abaixo e é necessário para que o código de exemplo funcione corretamente.

mod10.pl - Necessita deste patch


   1 package main;
   2 use Fatal qw/CORE::GLOBAL::open CORE::GLOBAL::close/;
   3 
   4 eval{ Note::thankYou(qw/Alvin Bobby Cindy David Erica Freddie/) };
   5 warn("Naughty package! $@\n") if $@;
   6 
   7 
   8 package Note;
   9 use File::Temp 'tmpnam';
  10 
  11 sub thankYou{
  12   foreach my $child (@_ ){
  13     my($fh, $file) = tmpnam();
  14 
  15     #Compose thank you for exceptional cookies and milk...
  16     
  17     #strict-less example using typo to force failure in closing unopened handle
  18     close($Fh);
  19 
  20     #Do something with the message $file
  21   }
  22 }
Traduzido por Nilson Santos Figueiredo Júnior.