2012-02-05 16 views
1

Windows上の小さなPerlスクリプトは、誰かによって書かれた依存ライブラリC:/strawberry/perl/vendor/lib/Term/ReadPassword/Win32.pmを呼び出そうとしました。ここでPerl Win32 :: Console error

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()); 
... 

私のスクリプトを実行しているときに次のエラーが現れた:How can I optionally use Win32::Console and its constants in a cross platform way?を議論し、私はhttp://metacpan.org/pod/Win32::Consoleを見上げてきたように括弧を使用して

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

は、合法的です。

ありがとうございました。

+0

以下のcjmの回答に加えて、 'warnings;'を必ず使用してください。 –

+0

Win32 :: Consoleの読み込みを妨げていた問題は何でしたか?どのように解決しましたか? – cjm

+0

@cjm答えをありがとう。私のPCにインストールされたイチゴのPerlがWin32 :: Consoleを正しくインストールしなかったようです。 ppmを使用して再インストールすると修正されました。 – Zeiga

答えて

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

エラーチェックは行われません。 Win32 :: Consoleが何らかの理由でロードに失敗した場合、ロードされていたはずのサブルーチンのうちの1つが実際に呼び出されるまで、コードは実行されます。その時点で、あなたが説明したように失敗するでしょう。

use Win32::Console;をスクリプトに追加するとどうなりますか? (Win32 :: Consoleがロードできないというエラーが出てくると思います)