2012-02-05 4 views
1

Windows에서 저의 작은 Perl 스크립트는 누군가 다른 사람이 작성한 의존 라이브러리 C:/strawberry/perl/vendor/lib/Term/ReadPassword/Win32.pm을 호출하려고했습니다. 괄호를 사용Perl Win32 :: Console error

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을 검토 한 결과로, 내 스크립트를 실행할 때 다음 오류가 나타났다

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

: 여기

C:/strawberry/perl/vendor/lib/Term/ReadPassword/Win32.pm의 일부입니다 .

감사합니다.

+0

아래의 cjm의 답변 외에도'use warnings; '을 반드시 확인하십시오. –

+0

그래서 Win32 :: Console이 로딩되지 못하게하는 문제는 무엇 이었습니까? 어떻게 해결 했습니까? – cjm

+0

@cjm 답변을 주셔서 감사합니다. 내 컴퓨터에 설치 한 딸기 펄이 Win32 :: Console을 올바르게 설치하지 않은 것 같습니다. ppm을 사용하여 재설치하면 문제가 해결되었습니다. – Zeiga

답변

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

오류 검사는 수행하지 않습니다. Win32 :: Console이 어떤 이유로 든로드되지 않으면 코드는 실제로로드 된 것으로 가정되었지만 실제로는 그렇지 않은 서브 루틴 중 하나를 호출 할 때까지 계속 진행됩니다. 그 시점에서 설명하는 것처럼 실패 할 것입니다.

use Win32::Console;을 스크립트에 추가하면 어떻게됩니까? (당신이 Win32 :: Console이로드 될 수 없다는 에러를 보게 될 것 같아요.)

관련 문제