【问题标题】:Perl Win32::Console errorPerl Win32::控制台错误
【发布时间】:2012-02-05 21:51:17
【问题描述】:

我在 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.

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

谢谢。

【问题讨论】:

  • 除了下面cjm的回答,请务必use warnings;
  • 那么阻止 Win32::Console 加载的问题是什么,您是如何解决的?
  • @cjm 感谢您的回答。看起来我在 PC 上安装的草莓 Perl 没有正确安装 Win32::Console。使用 ppm 重新安装它修复了它。

标签: perl perl-module


【解决方案1】:
eval('use Win32::Console');

不做任何错误检查。如果 Win32::Console 因任何原因未能加载,代码将继续执行,直到它实际调用本应加载但未加载的子例程之一。到那时,你会遇到你描述的失败。

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

【讨论】:

    猜你喜欢
    • 2015-03-08
    • 2011-06-11
    • 2013-06-12
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2019-08-05
    • 2016-05-14
    相关资源
    最近更新 更多