r2 - 05 Mar 2006 - NelsonFerraz
NOME
lib - modifica @INC em tempo de compilaçãoSINOPSE
use lib LIST;
no lib LIST;
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 comandosuse 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 deuse 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ãono 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;
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';
