Macports irssi 和 perl5 安装问题

Macports irssi 和 perl5 安装问题

长期读者,第一次发帖。非常感谢大家在这里和 stackoverflow 上的集体提问和回答,在我通过这些网站学习答案的这段时间里,这对我帮助很大!如果我没有仔细搜索这个网站上已经发布的帖子以找出我可以解决这个问题的方法,请提前道歉,但我想我至少应该尝试一次。

我在启动 macports 安装的 irssi 版本时遇到了这个问题:

13:25 -!- Irssi: Error in script dispatch:
13:25 Can't locate lib.pm in @INC (@INC contains: 
      /opt/local/lib/perl5/site_perl/5.12.4/darwin-multi-2level 
      /opt/local/lib/perl5/site_perl/5.12.4 
      /opt/local/lib/perl5/vendor_perl/5.12.4/darwin-multi-2level 
      /opt/local/lib/perl5/vendor_perl/5.12.4 
      /opt/local/lib/perl5/5.12.4/darwin-multi-2level 
      /opt/local/lib/perl5/5.12.4 
      /opt/local/lib/perl5/site_perl/5.12.3/darwin-multi-2level 
      /opt/local/lib/perl5/site_perl/5.12.3 /opt/local/lib/perl5/site_perl 
      /opt/local/lib/perl5/vendor_perl .) at (eval 18) line 1.
13:25 BEGIN failed--compilation aborted at (eval 18) line 1.
13:25 

嗯,很奇怪。我仔细研究了一下:

╭─@Ds-MacBook.local /opt/local/lib/perl5  
╰─ find . -name "lib.pm" -ls
14673887           16 -r--r--r--    1 root     admin        6853 25 Jun 23:39 ./5.12.4/darwin-thread-multi-    2level/lib.pm

╭─@Ds-MacBook.local /opt/local/lib/perl5  
╰─ l 5.12.4/darwin-thread-multi-2level 
total 1864
drwxr-xr-x   55 root  admin    1870 28 Jun 19:28 .
drwxr-xr-x  158 root  admin    5372 28 Jun 19:28 ..
-rw-r--r--    1 root  admin  177814 25 Jun 23:39 .packlist
drwxr-xr-x    6 root  admin     204 28 Jun 19:28 B
-r--r--r--    1 root  admin   25714 25 Jun 23:39 B.pm
drwxr-xr-x   64 root  admin    2176 28 Jun 19:28 CORE
drwxr-xr-x    3 root  admin     102 28 Jun 19:28 Compress
-r--r--r--    1 root  admin    3000 25 Jun 23:39 Config.pm
-r--r--r--    1 root  admin  228094 25 Jun 23:39 Config.pod
-r--r--r--    1 root  admin     409 25 Jun 23:39 Config_git.pl
-r--r--r--    1 root  admin   38759 25 Jun 23:39 Config_heavy.pl
-r--r--r--    1 root  admin   21174 25 Jun 23:39 Cwd.pm
-r--r--r--    1 root  admin   63535 25 Jun 23:39 DB_File.pm
drwxr-xr-x    3 root  admin     102 28 Jun 19:28 Data
drwxr-xr-x    5 root  admin     170 28 Jun 19:28 Devel
drwxr-xr-x    4 root  admin     136 28 Jun 19:28 Digest
-r--r--r--    1 root  admin   25185 25 Jun 23:39 DynaLoader.pm
drwxr-xr-x   22 root  admin     748 28 Jun 19:28 Encode
-r--r--r--    1 root  admin   29731 25 Jun 23:39 Encode.pm
-r--r--r--    1 root  admin    6736 25 Jun 23:39 Errno.pm
-r--r--r--    1 root  admin    5445 25 Jun 23:39 Fcntl.pm
drwxr-xr-x    5 root  admin     170 28 Jun 19:28 File
drwxr-xr-x    3 root  admin     102 28 Jun 19:28 Filter
-r--r--r--    1 root  admin    1819 25 Jun 23:39 GDBM_File.pm
drwxr-xr-x    4 root  admin     136 28 Jun 19:28 Hash
drwxr-xr-x    3 root  admin     102 28 Jun 19:28 I18N
drwxr-xr-x   11 root  admin     374 28 Jun 19:28 IO
-r--r--r--    1 root  admin    1404 25 Jun 23:39 IO.pm
drwxr-xr-x    6 root  admin     204 28 Jun 19:28 IPC
drwxr-xr-x    4 root  admin     136 28 Jun 19:28 List
drwxr-xr-x    4 root  admin     136 28 Jun 19:28 MIME
drwxr-xr-x    3 root  admin     102 28 Jun 19:28 Math
-r--r--r--    1 root  admin    2519 25 Jun 23:39 NDBM_File.pm
-r--r--r--    1 root  admin    4208 25 Jun 23:39 O.pm
-r--r--r--    1 root  admin   15563 25 Jun 23:39 Opcode.pm
-r--r--r--    1 root  admin   21011 25 Jun 23:39 POSIX.pm
-r--r--r--    1 root  admin   58962 25 Jun 23:39 POSIX.pod
drwxr-xr-x    5 root  admin     170 28 Jun 19:28 PerlIO
-r--r--r--    1 root  admin    2515 25 Jun 23:39 SDBM_File.pm
drwxr-xr-x    4 root  admin     136 28 Jun 19:28 Scalar
-r--r--r--    1 root  admin   10837 25 Jun 23:39 Socket.pm
-r--r--r--    1 root  admin   41003 25 Jun 23:39 Storable.pm
drwxr-xr-x    4 root  admin     136 28 Jun 19:28 Sys
drwxr-xr-x    3 root  admin     102 28 Jun 19:28 Text
drwxr-xr-x    5 root  admin     170 28 Jun 19:28 Time
drwxr-xr-x    3 root  admin     102 28 Jun 19:28 Unicode
-r--r--r--    1 root  admin   14462 25 Jun 23:39 attributes.pm
drwxr-xr-x   38 root  admin    1292 28 Jun 19:28 auto
-r--r--r--    1 root  admin   19892 25 Jun 23:39 encoding.pm
-r--r--r--    1 root  admin    6853 25 Jun 23:39 lib.pm
-r--r--r--    1 root  admin   11044 25 Jun 23:39 mro.pm
-r--r--r--    1 root  admin     997 25 Jun 23:39 ops.pm
-r--r--r--    1 root  admin   13945 25 Jun 23:39 re.pm
drwxr-xr-x    3 root  admin     102 28 Jun 19:28 threads
-r--r--r--    1 root  admin   33283 25 Jun 23:39 threads.pm

所以,在我看来,perl5 安装时为这些模块设置的权限似乎有些混乱?我并不是一个真正的 perl 用户,只是喜欢在文本文件中进行大量的目录递归查找/替换操作,所以我不太清楚这里的权限应该是什么样的,而且我不确定如何确定 macports 是如何以这种方式安装 perl 的,而它多年来一直没有出现故障。有没有人对纠正这个问题的最合理方法有什么建议?此外,macports 默认为 perl5 端口安装 5.12.4,而不是 5.16.0,而后者必须通过 perl5.16 端口明确安装,这有什么有趣的原因吗?

再次感谢!

答案1

问题是 Perl 端口最近都改为始终使用以前的+threads变体进行构建,因为否则 Perl 模块包会出现严重问题:它们根据线程或非线程 Perl 安装在不同的路径中,但没有可用的变体信息来告诉模块包应该使用哪个。因此,从包安装,或者从源代码安装(少数奇怪情况)会将正常工作的模块替换为安装在错误路径中的模块。对于那些使用(由于某些依赖端口强制)进行构建的人来说,这通常表现为丢失之+threads类的事情(我通常在尝试从其 中使用某些内容的背景下看到这种情况)。XML::Parsergettextconfigure

因此,端口已更改,+threads现在始终处于打开状态,模块不再随机消失。但并非每个 Perl 依赖项都被标记为需要重建,因此现在其中一些 — 作为一次性故障,而不是反复发生的故障 — 指向错误路径。修复方法是手动重建它们:

sudo port -n -f upgrade irssi

将重建,irssi因此它现在指向正确的 perl 模块。

irssi已经进行了改进以便下次port selfupdate; port upgrade outdated将自动重建它。)

至于其他:有很多东西依赖于 Perl,而且尚未使用 5.12 以上版本进行测试。随着测试的进行,默认的 Perl 版本将会提前。与此同时,您可以使用以下变体请求更新的版本:

sudo port upgrade --enforce-variants perl5 -perl5_12 +perl5_16

请注意,一些依赖于 Perl 的东西会指定它们已经测试过的确切版本;它们要么强制安装已知可以工作的 Perl 版本,要么如果你很幸运,它们会提供如上所述的变体,这样你就可以强制使用它将使用的 Perl 版本。(irssi似乎使用端口变体选择的任何 Perl perl5。)

相关内容