2012-02-05 146 views
1

我在Windows上的小Perl腳本試圖調用其他人編寫的依賴庫C:/strawberry/perl/vendor/lib/Term/ReadPassword/Win32.pmPerl Win32 ::控制檯錯誤

這裏是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

謝謝。

+0

除了cjm的回答下面,請務必'使用警告;'。 – 2012-02-05 23:13:44

+0

那麼是什麼問題阻止了Win32 :: Console的加載,以及你是如何解決它的? – cjm 2012-02-06 06:40:44

+0

@cjm謝謝你的回答。它看起來像我安裝在我的PC上的草莓Perl沒有正確安裝Win32 :: Console。使用ppm重新安裝它。 – Zeiga 2012-02-06 19:27:33

回答

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

不做任何錯誤檢查。如果Win32 :: Console因任何原因無法加載,代碼將繼續進行,直到它實際調用應該加載的子例程之一,但不是。在這一點上,你會得到像你所描述的失敗。

如果您將use Win32::Console;添加到腳本中,會發生什麼情況? (我猜你會得到某種錯誤,說Win32 :: Console無法加載。)