[Cascavel-pm] Re: [Cascavel-pm] utilização do _END_

Luis Campos de Carvalho lechamps em terra.com.br
Segunda Maio 5 08:34:08 CDT 2003


----- Original Message -----
From: "Alceu R. de Freitas Jr." <glasswalk3r em yahoo.com.br>
Sent: Friday, May 02, 2003 12:14 PM


> Olá lista,
>
> Alguém poderia me explciar qual a vantagem de utilizar
> um _END_ em scripts Perl? Eu já vi ele em alguns
> programas, já dei uma lida na documentação (na verdade
> apenas um guia de referência Perl), mas não vi nenhuma
> vantagem em utilizá-lo. Eu já criei uma porção de
> scripts, e nunca dei falta do dito cujo.
> Alguém poderia me elucidar sobre o assunto?

  Caro Alceu

  O manual do perl (conforme indicação do grande Ed Lobo) diz que os tags
__END__ e __DATA__ servem para interromper o parsing do script perl. Desta
forma, algumas coisas interessantes podem acontecer.

  Em módulos, é possível utilizar o tag __DATA__ (mas não o __END__) para
introduzir dados para o Selfloader, um módulo padrão do Perl que carrega
automaticamente as funções declaradas depois do __DATA__ sob requisição
(quer dizer, quando você chamar uma delas de fora do módulo). Desta forma,
você consegue manter módulos gigantescos com tempos de carregamento em
memória tendendo ao ridículo...

  De maneira similar, o __END__ funciona para o mesmo trabalho nos scripts
perl (não módulos), possibilitando scalonar o tempo de carga. Muito útil em
scripts grandes para CGI.

  Tanto o __END__ quanto o __DATA__ servem para manter pelo menos uma parte
da documentação POD do seu programa fora do alcance do interpretador, que
evita seeks pelos dados (o que em discos lentos pode ser doloroso). Esta é
uma micro-ptimização que está causando um flame-war na lista dos monges de
Londres. A questão principal é usar ou não usar, e que vantagens se pode
conseguir com micro-optimização. Aparentemente, ainda não temos posições
definitivas, mas conforme as coisas "esfriarem" por lá eu resumo a coisa
para os monges de Cascavel.

  Adicionalmente, você pode manter dados constantes sob ambos os tags
__END__ e __DATA__. Estes dados estão acessóiveis via descritor de arquivo
(automagicamente aberto em tempo de execução) __PACKAGE__::DATA (__PACKAGE__
é o nome do pacote que contém o tag __END__ ou __DATA__). Você pode ler
estes dados e usá-los como desejar.

  Isso poderia virar uma página HTML, eu acho... são informações bem úteis,
IMHO.
  Obrigado pelo tema de pesquisa. Eu gostei de aprender isso.
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  Luis Campos de Carvalho
  Computer Science Student
  OCP DBA Oracle & Unix Sys Admin
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=




Mais detalhes sobre a lista de discussão Cascavel-pm