Perl Win32 ::控制台错误

时间:2012-02-05 21:51:18

标签: perl perl-module

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

以下是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.

使用parens是合法的,正如所讨论的那样How can I optionally use Win32::Console and its constants in a cross platform way?,我查了http://metacpan.org/pod/Win32::Console

感谢。

1 个答案:

答案 0 :(得分:3)

eval('use Win32::Console');

不进行任何错误检查。如果Win32 :: Console由于任何原因无法加载,代码将继续进行,直到它实际调用其中一个本应已加载的子程序,但实际上没有。那时,你会像你描述的那样得到失败。

如果您在脚本中添加use Win32::Console;会怎样? (我猜你会得到某种错误,说无法加载Win32 :: Console。)