在@INC 中未搜索 Perl 扩展?

在@INC 中未搜索 Perl 扩展?

我在 Linux 上,没有 root 权限,并在本地 (在/home/me/local而不是/usr) 安装了 rpm。这很好,只是 rpm ( rxvt-unicode) 需要一些 Perl 模块,并且默认库搜索路径不包括我的本地目录。

有两个问题,但我只能修复其中一个。首先,/home/me/local/lib64/urxvt包含urxvt.pm。我可以通过设置PERL5LIB为 来解决这个问题/home/me/local/lib64/urxvt,所以没问题。

第二,/home/me/local/lib64/urxvt/perl包含各种扩展(包括/home/me/local/lib64/urxvt/perl/option-popup)。当我运行程序(urxvt)时,我现在收到各种消息,内容如下

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

不能通过添加额外的目录来解决这个问题PERL5LIB。例如:

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

没什么区别。我已经用 检查了搜索路径,perl -V它正确显示了两个目录。扩展有什么不同吗?他们不检查吗@INC

答案1

rxvt-unicode在编译目录中查找其扩展(可能类似于/usr/lib64/urxvt/perlRPM 包的情况,并且不会根据可执行文件的位置而改变),或者在perl-lib资源或--perl-lib命令行选项指定的目录中查找其扩展。

请参阅乌尔希(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.

因此,您需要在您的~/.Xresources~/.Xdefaults文件中添加类似这样的内容:

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

更新:自 rxvt-unicode 9.14 起,默认扩展路径包含$HOME/.urxvt/ext在编译的系统扩展目录之前,因此您可以将扩展文件放入其中,~/.urxvt/ext而不必设置perl-libX 资源。

除此之外,rxvt-unicode >= 9.16 在URXVT_PERL_LIB环境变量中列出的目录中查找 Perl 扩展。现在搜索顺序如下:

  1. X 资源中列出的目录perl-lib(多个目录以冒号分隔)。
  2. 环境变量中列出的目录URXVT_PERL_LIB(多个目录用冒号分隔)。
  3. $HOME/.urxvt/ext
  4. $LIBDIR/perl,其中$LIBDIR是编译到可执行文件中的软件包库目录名(例如/usr/lib64/urxvt)。

相关内容