2012-02-05 157 views
1

我在Windows上的小Perl脚本试图调用其他人编写的依赖库C:/strawberry/perl/vendor/lib/Term/ReadPassword/Win32.pmPerl Win32 ::控制台错误

这里是C:/strawberry/perl/vendor/lib/Term/ReadPassword/Win32.pm部分:

package Term::ReadPassword::Win32; 
use strict; 

if (IsWin32()) { 
    eval('use Win32'); 
    eval('use Win32::Console'); 
    eval('use Win32API::File'); 
} else { 
    eval('use Term::ReadPassword'); 
} 

... 

my $CONIN = new Win32::Console(Win32::Console::STD_INPUT_HANDLE()); 
my $CONOUT = new Win32::Console(Win32::Console::STD_ERROR_HANDLE()); 
... 

以下错误运行我的脚本时出现了:

Undefined subroutine &Win32::Console::STD_INPUT_HANDLE called at C:/strawberry/perl/vendor/lib/Term/ReadPassword/Win32.pm line 58, <STDIN> line 2. 

使用括号是合法的,因为讨论How can I optionally use Win32::Console and its constants in a cross platform way?和我抬头http://metacpan.org/pod/Win32::Console

谢谢。

+0

除了cjm的回答下面,请务必'使用警告;'。 – 2012-02-05 23:13:44

+0

那么是什么问题阻止了Win32 :: Console的加载,以及你是如何解决它的? – cjm 2012-02-06 06:40:44

+0

@cjm谢谢你的回答。它看起来像我安装在我的PC上的草莓Perl没有正确安装Win32 :: Console。使用ppm重新安装它。 – Zeiga 2012-02-06 19:27:33

回答

3
eval('use Win32::Console'); 

不做任何错误检查。如果Win32 :: Console因任何原因无法加载,代码将继续进行,直到它实际调用应该加载的子例程之一,但不是。在这一点上,你会得到像你所描述的失败。

如果您将use Win32::Console;添加到脚本中,会发生什么情况? (我猜你会得到某种错误,说Win32 :: Console无法加载。)