由于 Windows 样式 8.3 格式路径到 site/bin,cpanm 自我升级窒息

cpanm self-upgrade choking due Windows style 8.3 format path to site/bin

PS> cpanm --self-upgrade
You are running cpanm from the path where your current perl won't install executables to.
Because of that, cpanm --self-upgrade won't upgrade the version of cpanm you're running.

  cpanm path   : C:\Programs\Strawberry\perl\site\bin\cpanm.bat
  Install path : C:\Programs\STRAWB~1\perl\site\bin

It means you either installed cpanm globally with system perl, or use distro packages such
as rpm or apt-get, and you have to use them again to upgrade cpanm.

我如何 (a) 让 cpanm 理解这些是相同的路径,或者 (b) 更改配置的 Perl 可执行安装路径?

而不是 cpanm --self-upgrade,只需像 cpanm App::cpanminus 那样做就可以了。 (之前报错cpanm.bat.AAA无法重命名为cpanm.bat,下次开机会重命名,我只是手动重命名。)


并且为了防止潜在的其他类似问题,我将 Perl 移动到 C:\Programs\berry\ 下方(只是为了将其保持在 8 个字母以下),并编辑了 lib/CPAN/Config.pmlib/Config_heavy.pllib/Config.pm 将每个路径中的 STRAWB~1 替换为 berry
(这里的最后两个文件是 http://www.perlmonks.org/?node_id=680994 中的答案所建议的,第一个文件来自 o conf 期间 cpan 的输出。)

不幸的是,此路径更改无助于使 cpanm 的 --self-upgrade 正常工作,因为它打印出与问题中相同的错误消息,现在显示为不同的路径:

cpanm path   : C:\Programs\berry\perl\site\bin\cpanm.bat
Install path : C:\Programs\berry\perl\site\bin

嗯?他们不是同一条路吗?好吧,https://metacpan.org/source/MIYAGAWA/App-cpanminus-1.7039/lib/App/cpanminus/fatscript.pm 的第 634 行似乎是进行此检查的地方,并且该行假设 $install_base 不包含特殊字符 - 但 Windows 路径中的反斜杠被视为Perl 的特殊字符。因此,Perl 在安装路径中看到与 cpanm 路径不同的奇怪字符,并声明它不匹配。
将那里的正则表达式匹配更改为 /\Q$install_base\E/ 可以解决此问题,但作为最终用户的直接解决方案是顶部的 cpanm App::cpanminus