2

我将 perl 模块安装在~/.local/perl5. 以下是部分内容~/.bashrc

export PERL_LOCAL_LIB_ROOT="$HOME/.local/perl5";
export PERL_MB_OPT="--install_base $HOME/.local/perl5";
export PERL_MM_OPT="INSTALL_BASE=$HOME/.local/perl5";
export PERL5LIB="$HOME/.local/perl5/lib/perl5:$PERL5LIB";
export PATH="$HOME/.local/perl5/bin:$PATH";

我已经安装CSS::Inliner

$ cpan
cpan[1]> install CSS::Inliner

我有Inliner.pm

~/.local/perl5/lib/perl5/CSS/Inliner.pm

但是当我use- perl 找不到它时:

perl -e 'use Inliner'

给出:

Can't locate Inliner.pm in @INC (@INC contains:
/home/boris/.local/perl5/lib/perl5/x86_64-linux-gnu-thread-multi
/home/boris/.local/perl5/lib/perl5 /etc/perl
/usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5
/usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14
/usr/local/lib/site_perl .) at -e line 1. BEGIN failed--compilation
aborted at -e line 1.

为什么perl找不到模块?

编辑

我正在尝试重现CSS-Inliner文档中给出的最小工作示例:

use Inliner;

my $inliner = new Inliner();

$inliner->read_file({filename => 'myfile.html'});

print $inliner->inlinify();

如果我use Inliner-- perl 找不到它。如果我

#!/usr/bin/perl

use CSS::Inliner;

my $inliner = new Inliner();

$inliner->read_file({filename => 'test.html'});

print $inliner->inlinify();

perl 说

Can't locate object method "new" via package "Inliner"
(perhaps you forgot to load "Inliner"?) at ./1.perl line 5.

编辑 2

这是一个最小的工作示例CSS-Inliner

#!/usr/bin/perl

use CSS::Inliner;

my $inliner = CSS::Inliner->new;

$inliner->read_file({filename => 'test.html'});

print $inliner->inlinify();
4

2 回答 2

3

use调用类方法时应使用完整的模块名称和完整的类名称:

use CSS::Inliner;
my $inliner = CSS::Inliner->new;
于 2013-03-14T07:29:38.757 回答
0

当您在安装模块时不小心时,可能会发生这种情况。一旦我简单地将 foo.pm 复制到官方 /usr/lib/perl5/site_perl 目录中。foo.pm 可以是本地或第三方开发的模块。我没有注意umask。安装在那里的文件不被世界读取。当我使用该模块时,我会收到消息说:Cannot locate foo.pm in @INC(@INC contains /usr/lib/perl5/site_perl ....)。哎呀,它显然在那里!我花了一段时间检查文件权限。希望这可以为其他安装自己的模块的人节省一些时间。在 make 文件中,您应该使用 install -m 644 来确保安装的模块对其他人具有读取权限。

于 2016-05-14T17:39:54.140 回答