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