2016-12-16 3 views
4

Linux 환경에서 Windows 10 (WSL)의 Perl 스크립트를 사용하고 싶습니다. sudo apt-get install build-essential 실행 된 WSL, 설치된 컴파일러 (gccmake)를 활성화했습니다. Perl이 작동하고 간단한 스크립트를 실행할 수 있습니다. perl 모듈을 설치하려고 할 때 문제가 발생합니다. 예를 들어, perl -MCPAN -e'install "LWP"'을 실행하여 LWP을 추가하려고했습니다. Warning: the following files are missing in your kit:으로 시작하는 많은 오류/경고 메시지를 제공합니다. 전체 출력이 너무 커서 여기에 붙여 넣을 수 없으므로 다른 위치에 붙여 넣어야합니다 (http://pastebin.com/RRRedwbG). 간단히 말해 패키지와 상관없이 모든 .pm 및 .t 파일은 누락 된 것으로 간주됩니다.[Linux 용 Windows 서브 시스템]에 perl 모듈 설치

+2

아마도이 문제는 https://github.com/Microsoft/BashOnWindows/issues/186 – melpomene

+0

예! 방금 찾았습니다. –

+1

@VasilyA 그런데'cpan LWP'를 할 수 있습니다. 'perl -MCPAN -e ... '로 주변을 어지럽힐 필요가 없습니다. – melpomene

답변

4

이 솔루션은 github.com/Microsoft/BashOnWindows/issues/186에서 발견 sudo apt-get install liblocal-lib-perl cpanminus build-essential
2. 편집 /usr/lib/perl/5.18.2/Config.pm (라인 (94)의 주위는) dont_use_nlink => 1
3. 유닉스 파일 시스템에 eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"

+2

세 번째 명령은 local :: lib를 사용하기위한 것으로, 현재 문제와 관련이 없습니다. – ikegami

+1

첫 번째 명령은'local :: lib','cpanm' 및 일부 빌드 도구 (make, gcc 등)를 설치합니다. 그것은 직접적인 관련이 없습니다. – melpomene

+0

글쎄, 단지'Config.pm' 편집이 나에게 효과가 없었습니다. 세 명령을 모두 실행 한 후에 만 ​​성공했습니다. –

5

을 가지고
1. 실행, 디렉토리의 .는 하드 링크입니다 자체 디렉토리로, 디렉토리의 ..은 상위 디렉토리에 대한 하드 링크입니다. 따라서 stat 디렉토리가 있으면 stat에 의해 반환 된 링크 카운트는 적어도 1 (name) + 1 (.) + $num_sub_dirs (..)이됩니다.

$ ls -ld . 
drwx------ 5 ikegami ikegami 46 Dec 16 12:03 . # 5 = Could have up to three subdirs 

$ ls -l . 
total 0 
drwx------ 2 ikegami ikegami 10 Dec 16 12:03 a # 2 = No subdirs 
drwx------ 3 ikegami ikegami 24 Dec 16 12:03 b # 3 = Could have up to one subdir 
drwx------ 2 ikegami ikegami 10 Dec 16 12:03 c # 2 = No subdirs 

File :: Find는 가능한 경우 정보 자체를 최적화합니다.

Perl 및 File :: Find는 FAT 및 NTFS 파일 시스템에 해당하지 않으므로 Windows에서 최적화가 비활성화되어 있습니다. 그러나 VSL은 리눅스 시스템처럼 보이므로 유닉스 파일 시스템을 사용한다고 잘못 가정합니다. 당신은 사용의 변화를 확인할 수 있습니다

dont_use_nlink => undef 

dont_use_nlink => 1 

perl -MConfig -e'CORE::say $INC{"Config.pm"}' 

변경 :

가장 좋은 수정 프로그램은 다음 명령의 출력에 의해 명명 된 파일을 편집하는 것입니다

$ perl -V:dont_use_nlink 
dont_use_nlink='1'; 

이 답변은 this bug report을 기반으로합니다.