我该如何知道Perl模块安装在哪里?

3

我想知道 IO::Socket::SSL 模块的位置,更具体地说,就是文件 SSL.pm 的位置。我已经知道我已经安装了 IO::Socket::SSL,因为 use IO::Socket::SSL 是可以正常工作的。

4个回答

6

我总是使用类似以下的代码:

%> perl -MIO::Socket::SSL -e 'print $INC{"IO/Socket/SSL.pm"}';

你将获得路径,或者如果模块未按照perl可以获取的正确路径安装,则会出现错误。

如果您想查看该模块是否已安装:

%> perl -MIO::Socket::SSL -e 1

如果没有出现任何错误,那么它已经安装成功了。

有时候查看已安装软件包的版本号非常重要:

%> perl -MIO::Socket::SSL -e 'print $IO::Socket::SSL::VERSION';

如果你使用的是Windows系统,需要使用双引号:

C:\> perl -MIO::Socket::SSL -e "print $IO::Socket::SSL::VERSION";

4

这应该可以工作

perldoc -l 'IO::Socket::SSL'

或者在 cmd.exe 中执行。
perldoc -l "IO::Socket::SSL"

-l选项意味着“显示模块的文件名”。我发现它会显示模块的完全限定路径,或者(如果适用)显示与模块文件在同一目录下的模块外部POD的路径。


@Drt,我在bash中测试过了,无论是否使用引号都可以正常工作。你是在使用cmd.exe吗? - doubleDown
@Drt,您可以在使用Windows shell的时候,使用双引号与“cmd”一起使用。 - ikegami
@ikegami,好的。我已经更新了帖子,明确指定了外部POD。 - doubleDown
我不知道为什么你需要在任何shell中使用引号...我看不到元字符。 - runrig
@runrig,这是一种风格偏好的问题。就像我总是引用awksedgrep的表达式一样,即使它们不包含元字符。 - doubleDown

3
你可以这样做:

perl -E'use IO::Socket::SSL; say $INC{"IO/Socket/SSL.pm"};'

但是一般来说,大多数模块在Ubuntu上的/usr/share/perl5目录中。

1

pmtools package提供了许多有用的命令行工具,用于查找安装了哪个软件包(pmpath)、它的版本号是多少(pmvers)等等。


这肯定是最好的答案。 :) - tchrist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接