Autoloader.

AutoLoader é um módulo Perl que pode carregar sub-rotinas somente sob demanda.
Baixe Agora

Autoloader. Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • Perl Artistic License
  • Preço:
  • FREE
  • Nome do editor:
  • The Perl5-Porters
  • Site do editor:
  • http://search.cpan.org/~smueller/AutoLoader-5.63/lib/AutoLoader.pm

Autoloader. Tag


Autoloader. Descrição

O AutoLoader é um módulo Perl que pode carregar sub-rotinas somente sob demanda. AutoLoader é um módulo Perl que pode carregar sub-rotinas somente em demand.SYNOPSIS pacote Foo; uso AutoLoader 'AUTOLOAD'; # Importar o pacote AUTOLOAD sub-rotina padrão Bar; usar AutoLoader; # Não importar AUTOLOAD, definir a nossa própria sub AUTOLOAD {... $ AutoLoader :: AUTOLOAD = "..."; Goto AutoLoader :: AUTOLOAD; } O módulo AutoLoader funciona com o módulo AutoSplit eo __END__ token para adiar o carregamento de algumas subrotinas até que eles são usados em vez de carregá-los todos de uma once.To uso AutoLoader, o autor de um módulo tem que colocar as definições de sub-rotinas para ser autoloaded após um token __END__. (Veja perldata.) O módulo AutoSplit pode então ser executado manualmente para extrair as definições para arquivos individuais implementos auto / funcname.al.AutoLoader uma sub-rotina AUTOLOAD. Quando uma subrotina indefinida é a chamada em um módulo cliente de AutoLoader, tentativas AUTOLOAD de sub-rotinas de AutoLoader para localizar a subrotina em um arquivo com um nome relacionado com a localização do arquivo a partir do qual o módulo cliente foi lido. Como exemplo, se POSIX.pm está localizado na /usr/local/lib/perl5/POSIX.pm, AutoLoader irá procurar perl sub-rotinas POSIX em /usr/local/lib/perl5/auto/POSIX/*.al, onde o arquivo .al tem o mesmo nome da sub-rotina, pacote sans. Se tal um arquivo existe, AUTOLOAD vai ler e avaliá-lo, portanto, (presumivelmente) que define a rotina necessária. AUTOLOAD então goto subroutine.Once recém-definido Esse processo conclui para uma determinada função, é definido, então futuras chamadas para a vontade sub-rotina de desvio da ordem AUTOLOAD mechanism.Subroutine StubsIn para pesquisa de método de objeto e / ou protótipo testes para operar corretamente, mesmo quando os métodos de ainda não ter sido definida, é necessário "declarar a frente" cada sub-rotina (como em sub NOME;). Consulte "SINOPSE" em perlsub. Tal declaração para a frente cria "tocos de sub-rotina", que são detentores de lugar sem módulos code.The AutoSplit e AutoLoader automatizam a criação de declarações para a frente. O módulo AutoSplit cria um ficheiro de 'índice' contendo declarações para a frente de todos os sub-rotinas AutoSplit. Quando o módulo AutoLoader é 'use'd ele carrega estas declarações em seus chamadores package.Because desse mecanismo é importante que AutoLoader é sempre usado e não fim AUTOLOAD SubroutineIn de required.Using AutoLoader de usar sub-rotina AUTOLOAD de AutoLoader você deve importá-lo explicitamente: uso AutoLoader 'AUTOLOAD'; módulos AUTOLOAD SubroutineSome de Overriding AutoLoader, principalmente extensões, fornecer os seus próprios sub-rotinas AUTOLOAD. Eles normalmente precisa verificar se há alguns casos especiais (como constantes) e depois retorno para AUTOLOAD de AutoLoader para os módulos rest.Such não deve importar sub-rotina AUTOLOAD de AutoLoader. Em vez disso, eles devem definir os seus próprios sub-rotinas AUTOLOAD ao longo destas linhas: uso AutoLoader; usar carpa; sub AUTOLOAD {my $ sub = $ AUTOLOAD; (My $ constname = $ sub) = ~ s /.* :: //; my $ val = constante ($ constname, @_ $ _ : 0); if ($ = 0!) {if ($ = ~ / inválido / || $ {EINVAL}!) {$ AutoLoader :: AUTOLOAD = $ sub; Goto AutoLoader :: AUTOLOAD; } Else {coaxar "O fornecedor não definiu constante $ constname"; }} * $ Sub = sub {$ val}; # Mesmo que: eval "sub $ sub {$ val}"; Goto $ sub; } Se própria sub-rotina AUTOLOAD de qualquer módulo não tem necessidade de retorno para subrotina AUTOLOAD do AutoLoader (porque ele não tem nenhuma função AutoSplit), então esse módulo não deve usar AutoLoader em lexicals all.Package LexicalsPackage declarado com o meu no bloco principal de um pacote usando AutoLoader não será visível para as sub-rotinas de auto-carregado, devido ao fato de que as extremidades escopo fornecido no marcador __END__. Um módulo usando tais variáveis como globais pacote não funcionará corretamente sob o AutoLoader.The vars pragma (ver "vars" em perlmod) pode ser usado em tais situações como uma alternativa para qualificar explicitamente todas as variáveis globais com o namespace do pacote. Variáveis pré-declaradas com este pragma estarão visíveis para quaisquer rotinas de carregar automaticamente (mas não estará fora invisível do pacote, infelizmente) .Não Usando AutoLoaderYou pode parar de usar AutoLoader simplesmente não AutoLoader; AutoLoader vs. SelfLoaderThe AutoLoader é similar em propósito de SelfLoader : tanto o carregamento de atraso subroutines.SelfLoader usa o marcador __DATA__ em vez de __END__. Enquanto isto evita a utilização de uma hierarquia de arquivos de disco e o associado de abertura / fecho para cada rotina carregado, SelfLoader sofre uma desvantagem velocidade de arranque na análise de uma só vez das linhas após __DATA__, após o que as rotinas são em cache. SelfLoader também pode lidar com vários pacotes em um file.AutoLoader só lê o código, uma vez que é solicitado, e em muitos casos deve ser mais rápido, mas requer um mecanismo como AutoSplit ser usado para criar os arquivos individuais. ExtUtils :: MakeMaker invocará AutoSplit automaticamente se AutoLoader é usado em um arquivo de origem módulo. Requisitos: · Perl.


Autoloader. Software Relacionado