为啥即使 CPAN 说 GD::Graph::pie 已安装并且是最新的,“使用 GD::Graph::pie;”也会失败?

Posted

技术标签:

【中文标题】为啥即使 CPAN 说 GD::Graph::pie 已安装并且是最新的,“使用 GD::Graph::pie;”也会失败?【英文标题】:Why does `use GD::Graph::pie;` fail even though CPAN says that GD::Graph::pie is installed and up to date?为什么即使 CPAN 说 GD::Graph::pie 已安装并且是最新的,“使用 GD::Graph::pie;”也会失败? 【发布时间】:2017-03-06 23:37:11 【问题描述】:

我正在尝试运行一个名为 honeydsum.pl 的脚本。它没有通过测试并坚持我没有安装 GD::Graph::pie。失败的测试是:

unless (eval "use GD::Graph::pie; 1") 
   die "$program_name: please install GD::Graph::pie.";

因此它给出了输出:

honeydsum.pl:请安装 GD::Graph::pie。在 ./honeydsum.pl 第 65 行

我感到困惑的是,当我检查 CPAN 时,它显示 GD::Graph::pie 是最新的:

cpan[5]> install GD::Graph::pie
GD::Graph::pie is up to date (1.21).

我不是 Perl 专家,但是即使安装了模块,它是否会通过测试失败?

cpan -D 的输出:

~# cpan -D GD::Graph::pie
Reading '/root/.cpan/Metadata'
  Database was generated on Mon, 06 Mar 2017 21:17:02 GMT
GD::Graph::pie
-------------------------------------------------------------------------
    (no description)
    R/RU/RUZ/GDGraph-1.54.tar.gz
    /root/perl5/perlbrew/perls/perl-5.20.1/lib/site_perl/5.20.1/GD/Graph/pie.pm
    Installed: 1.21
    CPAN:      1.21  up to date
    Ruslan U. Zakirov (RUZ)
    Ruslan.Zakirov@gmail.com

没有来自

的输出
perl -MGD::Graph::pie -e1

在我的 /usr/share/ 目录中,我有以下与 perl 相关的内容:

perl/5.22 perl/5.22.2 perl5

我不确定正确的 perl 安装会在这个目录中放置什么。

【问题讨论】:

如果您尝试使用perl -MGD::Graph::pie -e1 加载模块会发生什么? 请不要张贴文字截图。有视觉障碍的人无法访问屏幕截图,无法搜索,并且当人们想在自己的系统上运行代码或谷歌以获取错误消息时,他们不得不手动重新输入文本。 脚本在shebang中有/usr/bin/perl。你安装了另一个perl吗?如果没有,听起来 GD::Graph::pie 安装在系统 perl 目录之外的某个地方。 cpan -D GD::Graph::pie 显示什么? @ThisSuitIsBlackNot 感谢您的编辑和指出。我没想到这一切。对于您从 cpan 的输出,我已在上面进行了编辑。 你可以知道为什么eval 失败了$@,就像$! for eval。也不需要使用字符串 eval,eval require GD::Graph::pie; GD::Graph::pie->import 有效。虽然常量字符串是安全的,但在不需要时养成使用字符串 eval 的习惯是不好的。 【参考方案1】:

脚本正在使用系统 perl,但您为 perlbrew 安装安装了 GD::Graph::pie。如果您希望脚本使用您的 perlbrew perl,请将 shebang 更改为

#! /usr/bin/perl -T -w

#! /root/perl5/perlbrew/perls/perl-5.20.1/bin/perl -T -w

【讨论】:

以上是关于为啥即使 CPAN 说 GD::Graph::pie 已安装并且是最新的,“使用 GD::Graph::pie;”也会失败?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CPAN 模块安装到本地目录中?

为啥最新的 Swift 版本总是说变量在使用前没有初始化

为啥说 HTTP2 是二进制协议?

是否有适用于 Perl 6 的类似 CPAN/CPAN6 的项目?

centos环境下使用CPAN安装perl模块

为啥说,信号处理函数里面不要用printf等库函数