我想在Windows 10(WSL)下的Linux环境中使用Perl脚本。我启用了WSL,安装了编译器(gcc
和make
),执行了sudo apt-get install build-essential
。 Perl正在工作,我可以运行简单的脚本。我尝试安装perl模块时出现问题。例如,我试图通过运行LWP
来添加perl -MCPAN -e'install "LWP"'
。从Warning: the following files are missing in your kit:
开始,它会提供大量错误/警告消息。完整输出太大而无法粘贴到此处,因此我必须将其放在其他地方:http://pastebin.com/RRRedwbG。简而言之,无论是什么包,所有的.pm和.t文件都被认为是丢失的。
答案 0 :(得分:7)
在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。
答案 1 :(得分:5)
在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)"