Долгое время читатель, первый постер. Большое, благодарное спасибо за коллективный опрос и ответы всех здесь и в 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 ответ1

2

Проблема в том, что все порты Perl были недавно изменены, чтобы они всегда создавались с тем, что раньше было вариантом +threads , потому что в противном случае были серьезные проблемы с пакетами модулей Perl: они устанавливаются по разным путям в зависимости от многопоточного или непоточного Perl, но нет пакетов вариантов, доступных для пакетов модулей, чтобы сказать, какой использовать. Таким образом, установка из пакетов или несколько странных случаев из исходного кода заменит рабочие модули на модули, установленные по неверному пути. Это обычно проявлялось для тех, кто собирал с +threads (как некоторые зависимые порты принудительно), когда такие вещи, как XML::Parser (я обычно видел это в контексте чего-то, пытающегося использовать gettext из его configure).

Итак, порты были изменены, +threads всегда включены, модули больше не пропадают случайно. Но не каждый зависимый от Perl был помечен как нуждающийся в восстановлении, поэтому теперь некоторые из них - как одноразовый сбой, а не тот, который постоянно повторяется - вместо этого указывают на неверные пути. Исправление состоит в том, чтобы восстановить их вручную:

sudo port -n -f upgrade irssi

восстановит irssi так что теперь он указывает на нужные модули perl.

irssi было revbumped так, чтобы следующий 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 .)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .