Perl Brasil

Pesquisar

Documentação

Artigos

Planeta

Eventos

Comunidade

r2 - 05 Mar 2006 - NelsonFerraz


NOME

lib - modifica @INC em tempo de compilação

voltar para o topo


SINOPSE

    use lib LIST;
    no lib LIST;

voltar para o topo


DESCRIÇÃO

Este é um módulo pequeno e simples que facilita a modificação de @INC em tempo de compilação. Normalmente é usado para adicionar diretórios extra aos caminhos que são pesquisados por perl, de forma que os comandos use ou require possam encontrar módulos que não estão no caminho de busca padrão.

Adicionando diretórios a @INC

Os parâmetros de use lib são adicionados ao início do caminho de busca de perl. Dizer
    use lib LIST;
é quase a mesma coisa que dizer
    BEGIN { unshift(@INC, LIST) }
Para cada diretório em LIST (que aqui chamaremos de $dir) o módulo lib também verifica se um diretório chamado $dir/$archname/auto também existe. Se existir, assume-se que o diretório $dir/$archname/ corresponde a um diretório específico de arquitetura, e é adicionado na a @INC na frente de $dir. Para evitar memory leaks, todas as entradas duplicadas em @INC são removidas.

Excluindo diretórios de @INC

Você normalmente só deveria adicionar diretórios a @INC. Se você precisar deletar diretórios de @INC, tenha cuidado para só excluir aqueles que você mesmo adicionou, ou que você tem certeza de que não serão necessários por outros módulos em seu script. Outros módulos podem ter adicionado diretórios que eles precisam para sua correta operação. A expressão no lib exclui todas as instâncias de cada diretório escolhido de @INC. Para cada diretório em LIST (que aqui chamaremos de $dir) o módulo lib também verifica se um diretório chamado $dir/$archname/auto também existe. Se existir, assume-se que o diretório $dir/$archname/ corresponde a um diretório específico de arquitetura, e também é deletado de @INC.

Restaurando o @INC original

Quando o módulo lib é carregado pela primeira vez ele guarda o valor de @INC na array @lib::ORIG_INC. Para restaurar o @INC original você pode dizer
    @INC = @lib::ORIG_INC;

voltar para o topo


PROBLEMAS

Para manter lib.pm pequeno e simples, este módulo só funciona com caminhos de arquivo Unix. Isso não significa que só funciona em Unix, mas usuários de sistemas não-Unix precisam primeiro traduzir os caminhos de arquivo para a convenção Unix.
    # VMS users wanting to put [.stuff.moo] into
    # their @INC would write
    use lib 'stuff/moo';

voltar para o topo


NOTAS

No futuro, este módulo provavelmente usará File::Spec para determinar os caminhos, como faz hoje no Mac OS (onde os estilos Unix e Mac funcionam, e os caminhos com estilo Unix são convertidos para estilo Mac antes de serem adicionados a @INC).

voltar para o topo


VEJA TAMBÉM

FindBin? - módulo opcional que lida com caminhos relativos ao do arquivo de origem.

voltar para o topo


AUTOR

Tim Bunce, 2nd June 1995.

voltar para o topo


TRADUÇÃO

Gabriel Vieira <gabriel.vieira no gmail.com> Nelson Ferraz <nferraz@gmail.com>

voltar para o topo