Perl Win32 :: Ошибка консоли - PullRequest
       14

Perl Win32 :: Ошибка консоли

1 голос
/ 06 февраля 2012

Мой маленький Perl-скрипт в Windows пытался вызвать библиотеку зависимостей 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.

Использование паренов является законным, как обсуждалось Как я могу дополнительно использовать Win32 :: Console и ее константы кросс-платформенным способом? и я посмотрел вверх http://metacpan.org/pod/Win32::Console.

Спасибо.

1 Ответ

3 голосов
/ 06 февраля 2012
eval('use Win32::Console');

не проверяет ошибки. Если Win32 :: Console не удастся загрузить по какой-либо причине, код будет продолжаться в любом случае, пока он фактически не вызовет одну из подпрограмм, которые должны были быть загружены, но не были. В этот момент вы получите ошибки, подобные описанным.

Что произойдет, если вы добавите use Win32::Console; в свой скрипт? (Я предполагаю, что вы получите какую-то ошибку, сообщающую, что Win32 :: Console не может быть загружен.)

...