2016-12-16 54 views
4

我想在Windows 10(WSL)的Linux環境下使用Perl腳本。我已經啓用了WSL,安裝了編譯器(gccmake),執行了sudo apt-get install build-essential。 Perl正在工作,我可以運行簡單的腳本。我嘗試安裝perl模塊時出現問題。例如,我試圖通過運行perl -MCPAN -e'install "LWP"'來添加LWP。它提供了很多錯誤/警告消息,從Warning: the following files are missing in your kit:開始。完整的輸出太大而無法粘貼在這裏,所以我必須把它放在其他地方:http://pastebin.com/RRRedwbG。簡而言之,無論是什麼包,所有的.pm和.t文件都被認爲是不存在的。在[Windows子系統for Linux]中安裝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
1.運行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

在UNIX文件系統中,目錄的.是硬鏈接自己,目錄的..是一個硬鏈接到其父目錄。所以當你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看起來像一個Linux系統,所以他們錯誤地認爲他們正在處理一個unix文件系統。

最好的解決方法是編輯通過以下命令的輸出文件名爲:

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

變化

dont_use_nlink => undef 

dont_use_nlink => 1 

可以使用驗證更改

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

此答案是基於this bug report