我在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。
感谢。
答案 0 :(得分:3)
eval('use Win32::Console');
不进行任何错误检查。如果Win32 :: Console由于任何原因无法加载,代码将继续进行,直到它实际调用其中一个本应已加载的子程序,但实际上没有。那时,你会像你描述的那样得到失败。
如果您在脚本中添加use Win32::Console;
会怎样? (我猜你会得到某种错误,说无法加载Win32 :: Console。)