2016-12-16 55 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