【问题标题】:How to install .pm to run the perl script如何安装 .pm 来运行 perl 脚本
【发布时间】:2014-01-07 10:28:42
【问题描述】:

我不是 perl 程序员。我刚刚安装了 perl 并尝试使用它运行 PERL 脚本,它在调试模式下给了我以下错误:

Win32::OLE 在调试模式下运行:_Unique => 1 at C:/strawberry/perl/vendor/lib/Win32/OLE/Lite.pm 第 30 行。 要求 Win32/OLE/Lite.pm 在 C:/strawberry/perl/vendor/lib/Win32/OLE.pm 第 48 行调用 要求 Win32/OLE.pm 在 C:\Users\c_desaik\Desktop\pwrdb\offtarget\pwrdb.pl 第 37 行调用 main::BEGIN() 在 C:/strawberry/perl/vendor/lib/Win32/OLE/Lite.pm 第 0 行调用 eval {...} 在 C:/strawberry/perl/vendor/lib/Win32/OLE/Lite.pm 第 0 行调用 main::(C:\Users\c_desaik\Desktop\pwrdb\offtarget\pwrdb.pl:53): 53:
我的 $prod_id = "QPSTAtmnServer.Application";

我几乎不明白它试图传达什么,但听起来我在我的包库中缺少 OLE.pm 文件。所以我搜索它,我发现了以下链接:

http://cpansearch.perl.org/src/JDB/Win32-OLE-0.1711/lib/Win32/OLE.pm

嗯,那里没有下载链接。我什至不确定如何将此源代码添加到我的库中。我应该在记事本中复制源代码并将其保存为 pm 文件还是执行其他操作?

有什么帮助吗?

【问题讨论】:

  • 试试cpan install Win32::OLE

标签: windows perl scripting strawberry-perl


【解决方案1】:

我注意到这类问题经常出现,所以我将输入一个通用答案,可以作为任何人的快速介绍。

所以!

您通常会通过以下三种方式之一来获取模块:

来自 CPAN(最常见)

CPAN 提供了相当详尽的指南:How to install CPAN Perl modules。根据您安装的 Perl 工具,您可以在命令行上尝试其中一种:

cpan install Some::Module
cpanm Some::Module

由于您使用的是 Windows,我会提到 Strawberry Perl 应该同时安装这两个工具。

可构建的源代码(不太常见)

如果您在 Github 或其他一些开源 repo 上找到可构建的模块,那么无论如何它都可能在 CPAN 上可用。如果不是,或者如果您想安装开发版本,大多数成熟的模块将包含克隆和构建的快速说明。检查项目的 README 文件!

这样的东西很流行,克隆后:

perl Build.PL
./Build
./Build test
./Build install

以上是Module::Build 提供的一套脚本操作,这是一种将模块组合在一起以进行分发的流行机制。

独立的 Perl 文件(罕见)

单独的模块文件将不包含任何测试或安装脚本。我会警惕信任此类模块,但可以使用它们。

您可能需要通过上面列出的任何一种方法安装各种依赖项。根据我的经验,这些临时模块中的大多数并不期望被“安装”,它们可以留在当前项目的根目录中。

【讨论】:

  • 非常感谢它已成功下载,我可以使用 perldoc Win32::OLE 并获取文档。另外,现在我可以在文件夹中看到 .Pm 文件。但是,我仍然看到一些类似的错误:我打开了一个新问题:stackoverflow.com/questions/20690151/…
【解决方案2】:

一个非常非常重要的问题:

  • 你有 Strawberry Perl,还是
  • 你有 ActivePerl 吗?

如果您有 Strawberry Perl,您将使用名为 cpan 的命令行实用程序。对于使用 GUI 的人来说,这可能有点吓人。首先你必须运行它,这样它就可以自己配置。大部分配置都是自动完成的,您可以简单地接受默认值。

配置完成后,您可能需要再次运行cpan*.pm 后缀代表 Perl 模块,您必须安装缺少的 Perl 模块。让我们再看看你的错误信息:

Win32::OLE 在调试模式下运行:_Unique => 1 at
C:/strawberry/perl/vendor/lib/Win32/OLE/Lite.pm 第 30 行。要求在 C:/strawberry/ 调用 Win32/OLE/Lite.pm perl/vendor/lib/Win32/OLE.pm 第 48 行要求在 C:\Users\c_desaik\Desktop\pwrdb\offtarget\pwrdb 调用 Win32/OLE.pm。 pl line 37 main::BEGIN() 在 C:/strawberry/perl/vendor/lib/Win32/OLE/Lite.pm line 0 eval {...} 在 C:/strawberry 调用/perl/vendor/lib/Win32/OLE/Lite.pm 第 0 行 main:: (C:\Users\c_desaik\Desktop\pwrdb\offtarget\pwrdb.pl:53): 53: 我的$prod_id = `"QPSTAtmnServer.Application";

据此,您缺少两个模块:一个称为Win32::OLE::Lite(来自Win32/OLE/Lite.pm),另一个称为Win32::OLE(来自Win32/OLE

您可以转到http://search.cpan.com,在搜索框中输入Win32::OLE::Lite,然后您将获得Win32::OLE CPAN 页面,该页面解释了如何使用此模块。原来Win32::OLE::Lite 是这个模块中包含的一个子模块。你永远不会单独解决它。

反过来,这个模块很可能依赖于其他模块,而其他模块又可能依赖于其他模块。别担心,CPAN 会处理所有依赖问题。

现在,要安装这个模块,只需输入以下命令:

C:\> cpan install Win32::OLE

CPAN 会用输出页面填满你的屏幕。随着它的放大阅读并记住它,因为每个单词都是绝对重要的要记住。好吧,也许不是。但是,我建议您将 Windows 命令提示符终端屏幕缓冲区高度从 300 行更改为 9999 行,以防有重要事项。

当你这样做时,你会看到:

CPAN: CPAN::SQLite loaded ok (v0.202)
CPAN: LWP::UserAgent loaded ok (v6.04)
CPAN: Time::HiRes loaded ok (v1.9725)
Fetching with LWP:
http://cpan.strawberryperl.com/authors/01mailrc.txt.gz
CPAN: YAML::XS loaded ok (v0.38)
Fetching with LWP:
http://cpan.strawberryperl.com/modules/02packages.details.txt.gz
Fetching with LWP:
http://cpan.strawberryperl.com/modules/03modlist.data.gz
Database was generated on Tue, 10 Sep 2013 19:27:08 GMT
Updating database file ...

不断……

您会收到大量警告:

OLE.xs:5674:68: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
OLE.xs:5676:67: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
OLE.xs:5678:70: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
OLE.xs:5680:71: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
OLE.xs:5683:63: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
....

这是课程的标准。只要你没有看到可怕的词error,你就没事。

编译后,你会看到一堆测试:

C:\perl\perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\lib',    'blib\arch')" t/*.t
t/1_nls.t ....... ok
t/2_variant.t ... ok
t/3_ole.t ....... ok
t/4_compat.t .... ok
t/5_unicode.t ... skipped: Unicode::String module not installed
t/6_event.t ..... ok
t/7_overload.t .. ok

okskipped 没问题。运气好的话,你会看到:

All tests successful.
Files=7, Tests=112, 241 wallclock secs ( 0.09 usr +  0.03 sys =  0.13 CPU)

接下来是安装,大功告成。

类型:

C:\> perldoc Win32::OLE

而且,如果安装了该模块,那应该会为您提供该模块上的 Perl Doc

现在,运行你的程序,希望一切正常。

【讨论】:

  • 非常感谢它已成功下载,我可以使用 perldoc Win32::OLE 并获取文档。另外,现在我可以在文件夹中看到 .Pm 文件。但是,我仍然看到一些类似的错误:我打开了一个新问题:stackoverflow.com/questions/20690151/…
猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 2012-06-30
  • 2015-04-30
  • 2012-06-16
  • 1970-01-01
  • 2015-02-17
  • 2010-12-02
  • 2018-05-28
相关资源
最近更新 更多