2

我不是 perl 程序员。我刚刚安装了 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 行需要 Win32/OLE.pm 在 C:\Users\c_desaik\Desktop\pwrdb\offtarget\pwrdb.pl 调用第 37 行 main::BEGIN() 在 C:/ 调用草莓/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 文件还是执行其他操作?

有什么帮助吗?

4

2 回答 2

6

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

所以!

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

来自 CPAN(最常见)

CPAN 提供了相当详尽的指南:如何安装 CPAN Perl 模块。根据您安装的 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 文件(罕见)

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

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

于 2013-12-19T01:31:15.370 回答
3

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

  • 你有草莓 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 行。要求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:/ 调用草莓/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";

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

您可以访问http://search.cpan.comWin32::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

ok并且skipped很好。运气好的话,你会看到:

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

接下来,安装,你就完成了。

类型:

C:\> perldoc Win32::OLE

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

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

于 2013-12-19T01:52:23.970 回答