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


1

Estou no Linux, sem acesso root, e instalei um rpm localmente (em /home/me/localvez de 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/urxvtcontém urxvt.pm. Eu posso consertar isso por configuração PERL5LIBpara /home/me/local/lib64/urxvt, então não há problema.

Em segundo lugar, /home/me/local/lib64/urxvt/perlcontém várias extensões (incluindo /home/me/local/lib64/urxvt/perl/option-popup). Quando eu executo o programa ( urxvt) eu 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 consertar isso adicionando o diretório extra para 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 -Ve mostra corretamente ambos os diretórios. Existe algo diferente sobre extensões? Eles não checam @INC?

Respostas:


3

rxvt-unicodeprocura por suas extensões em um diretório compilado (que pode ser algo como /usr/lib64/urxvt/perlno caso de um pacote RPM e não muda de acordo com a localização de arquivos executáveis), ou em diretórios especificados pelo perl-librecurso ou pela --perl-libopção de linha de comando.

Veja a parte relevante da página man do 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.

Então você precisa adicionar algo assim ao seu ~/.Xresourcesou ~/.Xdefaultsarquivo:

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/extantes do diretório de extensão do sistema compilado, portanto, você pode apenas colocar seus arquivos de extensão em ~/.urxvt/extvez de configurar o perl-librecurso X.

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

  1. Diretórios listados no perl-librecurso X (vários diretórios separados por dois pontos).
  2. Diretórios listados na URXVT_PERL_LIBvariável de ambiente (vários diretórios separados por dois pontos).
  3. $HOME/.urxvt/ext
  4. $LIBDIR/perl, onde $LIBDIRestá o nome do diretório da biblioteca do pacote compilado no executável (por exemplo, /usr/lib64/urxvt).

Podemos usar uma variável de ambiente ou ~ em .Xresources?
Chris

Não, as variáveis ​​de ambiente não são expandidas no perl-librecurso nem pelo rxvt-unicode nem pelo xrdb. No entanto, veja a resposta atualizada - se você tiver uma versão recente do rxvt-unicode, você pode simplesmente colocar suas extensões em ~/.urxvt/ext, ou definir URXVT_PERL_LIBem um script onde você pode usar valores de outras variáveis ​​de ambiente.
Sergey Vlasov
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.