Extensões Perl não procuradas em @INC?

1

Estou no Linux, sem acesso root, e instalei um rpm localmente (em /home/me/local , em vez de /usr ). Isso é bom, exceto que o rpm ( rxvt-unicode ) requer alguns módulos Perl, e o caminho de pesquisa da biblioteca padrão não inclui meus diretórios locais.

Existem dois problemas, mas só posso consertar um deles. Primeiro, /home/me/local/lib64/urxvt contém urxvt.pm . Eu posso consertar isso configurando PERL5LIB para /home/me/local/lib64/urxvt , então não há problema.

Em segundo lugar, /home/me/local/lib64/urxvt/perl contém várias extensões (incluindo /home/me/local/lib64/urxvt/perl/option-popup ). Quando eu executo o programa ( urxvt ) agora recebo várias mensagens ao longo das linhas de

urxvt: perl extension 'option-popup' not found in perl library search path

Eu não posso corrigir isso adicionando o diretório extra a PERL5LIB . por exemplo, isso:

setenv PERL5LIB /home/me/local/lib64/urxvt/perl:/home/me/local/lib64/urxvt

não faz diferença. Eu verifiquei o caminho de pesquisa com perl -V e ele mostra corretamente os dois diretórios. Existe algo diferente sobre extensões? Eles não verificam @INC ?

    
por EML 01.05.2013 / 12:57

1 resposta

3

rxvt-unicode procura suas extensões em um diretório compilado (que pode ser algo como /usr/lib64/urxvt/perl no caso de um pacote RPM e não é alterado de acordo com o local dos arquivos executáveis) ou nos diretórios especificados pelo recurso perl-lib ou a opção de linha de comando --perl-lib .

Veja a parte relevante na página do manual urxvt (1):

   perl-lib: path
       Colon-separated list of additional directories that hold extension
       scripts. When looking for extensions specified by the "perl"
       resource, urxvt will first look in these directories and then in
       /usr/lib64/urxvt/perl/.

       See the urxvtperl(3) manpage.

Você precisa adicionar algo assim ao seu arquivo ~/.Xresources ou ~/.Xdefaults :

URxvt.perl-lib: /home/me/local/lib64/urxvt/perl

Atualização: Desde o rxvt-unicode 9.14, o caminho da extensão padrão inclui $HOME/.urxvt/ext antes do diretório de extensão do sistema compilado, portanto, basta colocar os arquivos de extensão em ~/.urxvt/ext em vez de definir o perl-lib X resource.

Além disso, rxvt-unicode > = 9.16 procura por extensões Perl em diretórios listados na variável de ambiente URXVT_PERL_LIB . Agora, a ordem de pesquisa é a seguinte:

  1. Diretórios listados no recurso perl-lib X (vários diretórios separados por dois pontos).
  2. Diretórios listados na variável de ambiente URXVT_PERL_LIB (vários diretórios separados por dois pontos).
  3. $HOME/.urxvt/ext
  4. $LIBDIR/perl , em que $LIBDIR é o nome do diretório da biblioteca do pacote compilado no executável (por exemplo, /usr/lib64/urxvt ).
por 01.05.2013 / 13:25

Tags