能够通过编码BEGIN块将所需的路径放入@INC,但仍然不能“使用win32 :: Clipboard;”

时间:2014-07-18 05:37:26

标签: perl perl-module

我的电脑正在运行Windows 7.大约一周前,我为Windows XP或更高版本下载并安装了Strawberry Perl 5.18.2.2(64位)。在我尝试包含"使用win32 :: Clipboard;"。

之前,我没有遇到运行这个新版本的问题。

模块Clipboard.pm是最近下载的一部分,位于我的电脑C:\ strawberry \ win32 \ Clipboard \ Clipboard.pm。请注意,在此完整路径中,除了" C"的三个实例外,所有字母均为小写。

如果我打印出@INC的现有内容,结果就是这三个目录: C:/草莓/ perl的/网站/ lib目录 C:/草莓/ perl的/供应商/ lib中 C:/草莓/ perl的/ lib中

从" C:/ strawberry / win32 /剪贴板"不是原来的" @ INC",我知道我必须添加该目录才能使用win32 :: Clipboard;"所以我雇用了" BEGIN"命令在这个简单程序的第二行上执行此操作。

#!C:\strawberry\perl\bin\perl - w
BEGIN {unshift @INC, "C:/strawberry/win32/Clipboard"}
use strict;
foreach (@INC)
{
   print "$_\n";
}
<STDIN>;

这个简单的程序运行没有错误,并且确实移动了路径&#34; C:/ strawberry / win32 / Clipboard&#34;通过在BEGIN命令之后打印出@INC的内容证明了@INC,这产生了这样的结果: C:/草莓/的Win32 /剪贴板 C:/草莓/ perl的/网站/ lib目录 C:/草莓/ perl的/供应商/ lib中 C:/草莓/ perl的/ lib中

因为我设法得到&#34; C:/ strawberry / win32 / Clipboard&#34;进入@INC,我以为我现在可以使用win32 :: Clipboard;&#34;所以我将该行添加到程序中以制作这个新版本:

#!C:\strawberry\perl\bin\perl - w
BEGIN {unshift @INC, "C:/strawberry/win32/Clipboard"}
use Win32::Clipboard; # NOTE that in this line I have also tried "use Win32::Clipboard::Clipboard;" and "use Clipboard::Clipboard;" without success.
use strict;
foreach (@INC)
{
  print "$_\n";
}
<STDIN>;

添加新行&#34;使用Win32 :: Clipboard;&#34;,在运行程序时导致此错误。

&#34;无法在@INC中找到Win32 / Clipboard.pm(您可能需要安装Win32 :: Clipboard模块)(@INC包含:C:/ strawberry / win32 / Clipboard C:/ strawberry / perl / site / lib C:/ strawberry / perl / vendor / lib C:/ strawberry / perl / lib。)at print_inc_array.pl第5行。 BEGIN失败 - 编译在第5行的print_inc_array1.pl中止。&#34;

尽管如此,我已经在互联网上看了很多被认为是正确方法的例子,但这些例子都不适合我。我无法弄清楚这个简单程序有什么问题,其目的只是找出如何编写模块Clipboard.pm,以便我可以在实际程序中编写该模块。我再次尝试改变&#34;使用&#34; line to&#34;使用Win32 :: Clipboard :: Clipboard;&#34;并使用剪贴板::剪贴板;&#34;没有成功。任何帮助将不胜感激。

谢谢,

Reef Alive

1 个答案:

答案 0 :(得分:1)

当您说use Win32::Clipboard; Perl尝试在Win32\Clipboard.pm中的某个目录中找到@INC时。自从您将C:/strawberry/win32/Clipboard添加到@INC后,它会尝试加载C:\strawberry\win32\Clipboard\Win32\Clipboard.pm。但那个档案并不存在;它取而代之的是C:\strawberry\win32\Clipboard\Clipboard.pm。所以Perl无法找到该文件。

Win32::Clipboard是一个XS模块,这意味着它包含的代码必须由C编译器编译才能使用。您提到的目录布局表明您刚刚解压缩了存档。那不会起作用;你需要编译XS代码。

编译XS代码并在正确的路径中安装模块的最简单方法是使用Strawberry Perl附带的cpan命令。只需输入

即可
cpan Win32::Clipboard

在命令提示符下。