无法在@INC中找到***

时间:2013-03-14 07:11:48

标签: perl

我在~/.local/perl5中安装了perl模块。这是~/.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();

2 个答案:

答案 0 :(得分:3)

在调用类方法时,您应该使用use中的完整模块名称和完整的类名:

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

答案 1 :(得分:0)

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