【问题标题】:Installing perl modules in [Windows Subsystem for Linux]在 [Windows 子系统 for Linux] 中安装 perl 模块
【发布时间】:2017-05-02 12:39:22
【问题描述】:

我想在 Windows 10 (WSL) 下的 Linux 环境中使用 Perl 脚本。我启用了 WSL,安装了编译器(gcc 和make),执行了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文件都被视为丢失。

【问题讨论】:

  • 是的!我也刚刚找到了
  • @VasilyA 顺便说一句,你可以做cpan LWP。无需纠结perl -MCPAN -e ...。
  • @melpomene 哦,是的。我错过了那条线。
  • @ikegami 我觉得自己不够胜任。我从来没有使用过WSL,根据链接,这个bug已经关闭,所以我不知道该推荐什么。

标签: linux perl windows-10 windows-subsystem-for-linux


【解决方案1】:

在 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。

【讨论】:

    【解决方案2】:

    在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)"

    【讨论】:

    • 第三个命令用于使用 local::lib,这与手头的问题无关。
    • 第一个命令安装local::lib、cpanm和一些构建工具(make、gcc等)。也没有直接关系。
    • 好吧,只是编辑Config.pm对我不起作用,我只是在运行所有三个命令后才成功。
    • @VasilyA 编辑 Config.pm 后出现什么错误?
    • 您可能出于不相关的原因需要/想要它们。
    猜你喜欢
    • 2020-11-02
    • 2011-11-02
    • 2012-03-13
    • 1970-01-01
    • 2021-02-04
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多