Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我用CPAN成功地安装了一个模块,但是perl可以';我找不到。为什么?_Perl_Cpan - Fatal编程技术网

我用CPAN成功地安装了一个模块,但是perl可以';我找不到。为什么?

我用CPAN成功地安装了一个模块,但是perl可以';我找不到。为什么?,perl,cpan,Perl,Cpan,我安装了一个CPAN模块,如下所示: cpan-Acme 根据输出,安装成功: 正在运行模块“Acme”的安装 ... 所有测试均成功。 文件=2,测试=3,0个时钟秒(0.02 usr 0.00 sys+0.04 cusr 0.00 csys=0.06 CPU) 结果:通过 INGY/Acme-1.11111111.tar.gz /usr/bin/make测试——正常 运行make安装 Manizing 1 pod文档 安装/home/foo/perl5/lib/perl5/Acme.pod

我安装了一个CPAN模块,如下所示:

cpan-Acme
根据输出,安装成功:

正在运行模块“Acme”的安装 ... 所有测试均成功。 文件=2,测试=3,0个时钟秒(0.02 usr 0.00 sys+0.04 cusr 0.00 csys=0.06 CPU) 结果:通过 INGY/Acme-1.11111111.tar.gz /usr/bin/make测试——正常 运行make安装 Manizing 1 pod文档 安装/home/foo/perl5/lib/perl5/Acme.pod 安装/home/foo/perl5/lib/perl5/Acme.pm 安装/home/foo/perl5/man/man3/Acme.3pm 正在将安装信息附加到/home/foo/perl5/lib/perl5/x86_64-linux-thread-multi/perllocal.pod INGY/Acme-1.11111111.tar.gz /usr/bin/make安装--正常 但当我尝试使用该模块时,我得到一个错误:

$perl-MAcme-e1
在@INC中找不到Acme.pm(@INC-contains:/usr/local/lib64/perl5/usr/local/share/perl5/usr/lib64/perl5/vendor\u perl/usr/lib64/perl5/usr/share/perl5。)。
BEGIN失败--编译中止。

为什么perl无法找到模块,即使它已成功安装?如何修复此问题?

模块安装在此处:

/home/foo/perl5/lib/perl5/Acme.pm
但是perl在中查找模块,在本例中包含:

/usr/local/lib64/perl5
/usr/本地/共享/perl5
/usr/lib64/perl5/vendor\u perl
/usr/share/perl5/vendor\u perl
/usr/lib64/perl5
/usr/share/perl5
.
指当前工作目录。)

由于模块不在
@INC
中,perl无法在没有帮助的情况下找到它

为什么CPAN在
@INC
之外安装模块? 一个常见的原因是将CPAN配置为引导,以便将模块安装在主目录中,而不是系统Perl目录中。如果您在默认安装路径中具有或不具有写入权限,则第一次运行CPAN时将提示您:

警告:您没有Perl库目录的写入权限。
要安装模块,您需要配置本地Perl库目录或
提升你的特权。CPAN可以通过引导本地::lib来帮助您
模块或通过将自身配置为使用“sudo”(如果可用)。你也可以
如果需要自定义设置,请手动解决此问题。
你想要什么方法?(选择“local::lib”、“sudo”或“manual”)
[本地::lib]
如果选择引导local::lib(默认设置),则模块将安装在
~/perl5
中。还可能会出现如下提示:

您希望我现在将其附加到/home/foo/.bashrc中吗?[是]
如果选择“是”(默认),一些变量将添加到
.bashrc
(或shell的等效变量),以便将来运行CPAN时,模块将继续安装在主目录中:

PATH=“/home/foo/perl5/bin${PATH+:}${PATH}”;出口路径;
PERL5LIB=“/home/foo/perl5/lib/perl5${PERL5LIB+:}${PERL5LIB}”;出口许可证;
PERL_LOCAL_LIB_ROOT=“/home/foo/perl5${PERL_LOCAL_LIB_ROOT+:}${PERL_LOCAL_LIB_ROOT}”;导出PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT=“--install_base\”/home/foo/perl5\”;导出PERL_MB_OPT;
PERL_MM_OPT=“INSTALL_BASE=/home/foo/perl5”;导出PERL_MM_OPT;
我怎样才能修好它? 如果CPAN将上述环境变量添加到
.bashrc
(或等效项)中,最简单的方法就是启动一个新的shell(或编写
.bashrc
)。这将设置为perl可以找到安装在
~/perl5
中的模块

另一方面,如果您具有sudo访问权限,并且希望CPAN将模块安装在system Perl目录中而不是主目录中,请从
.bashrc
(或等效文件)中删除环境变量设置,启动CPAN shell,然后运行:

o conf init
这将重置CPAN配置。如果要引导local::lib,将再次提示您;输入“sudo”。一般来说,我不建议这样做;通常最好使用发行版的包管理器(例如yum、apt)在系统Perl目录中安装模块


另请参见:

我找到的解决方案是在其中一个
@INC
目录中找到
/local/lib.pm
,并将其删除或重命名(为“pm”以外的扩展名)。然后,在Centos 7/RedHat 7上重命名(为“sh”或“csh”以外的扩展名)或删除/etc/profile.d/perl homedir.sh.

这是由程序包perl homedir引起的。它通过/etc/profile.d设置变量。移除它。一切都比预期的好。我花了几个小时才找到为什么我无法从Epel或CentOS重建包。

我最近看到了几个类似的问题(,,可能……有趣的是,都是在OS X上),所以我写了一个规范的Q/a,我们可以向人们指出。欢迎对问题和答案进行编辑。(我现在无法访问OS X或Windows,因此某些细节可能需要调整。)