Как мне найти стандартный каталог site_perl для Perl? - PullRequest
5 голосов
/ 08 июня 2009

Как найти стандартное местоположение site_perl (не для конкретной арки)? Безопасно ли просто перебрать @INC и найти путь, заканчивающийся на «site_perl», или есть стандартный способ сделать это?

Причина, по которой я пытаюсь это выяснить, заключается в том, что у меня очень большой проект, построенный из сотен отдельных модулей, каждый из которых имеет свои собственные файлы Makefile.PL (почти каждый файл .pm был построен как собственный модуль в стиле CPAN). ). Наряду с этим, каждый модуль может иметь артефакты (шаблоны, .cgi и т. Д.) В разных местах, все, что нужно развернуть в разных местах, ничего стандартного. Это первый шаг в попытке взять это под контроль, в основном, имея один Makefile, который может найти и развернуть все, следующим шагом будет получение его в разумной форме в управлении версиями.

Я потратил время, пытаясь сделать это с помощью стандартных инструментов установки, но мне не повезло.

Ответы [ 4 ]

8 голосов
/ 08 июня 2009
C:\Temp> perl -MConfig -e "print qq{$_ => $Config{$_}\n} for grep { /site/ } keys %Config"

  d_sitearch => define
  installsitearch => C:\opt\perl\site\lib
  installsitebin => C:\opt\perl\site\bin
  installsitehtml1dir =>
  installsitehtml3dir =>
  installsitelib => C:\opt\perl\site\lib
  installsiteman1dir =>
  installsiteman3dir =>
  installsitescript => C:\opt\perl\site\bin
  sitearch => C:\opt\perl\site\lib
  sitearchexp => C:\opt\perl\site\lib
  sitebin => C:\opt\perl\site\bin
  sitebinexp => C:\opt\perl\site\bin
  sitehtml1dir =>
  sitehtml1direxp =>
  sitehtml3dir =>
  sitehtml3direxp =>
  sitelib => C:\opt\perl\site\lib
  sitelib_stem =>
  sitelibexp => C:\opt\perl\site\lib
  siteman1dir =>
  siteman1direxp =>
  siteman3dir =>
  siteman3direxp =>
  siteprefix => C:\opt\perl\site
  siteprefixexp => C:\opt\perl\site
  sitescript =>
  sitescriptexp =>
  usesitecustomize => define

Или, как указывает @ysth в комментариях, вы можете использовать:

C:\Temp> perl -V:.*site.*

в Windows и

 $ perl '-V:.*site.*'

in * nix shell.

5 голосов
/ 08 июня 2009

Есть ли причина не использовать один из установщиков модулей ( ExtUtils :: MakeMaker , Module :: Build , Module :: Install )?

Но если необходимо, каталог доступен (после загрузки Config) как $Config::Config{'installsitelib'}. Обратите внимание, что некоторые платформы могут настраивать perl таким образом, что этот каталог буквально не появляется в @INC, вместо этого имеется другой каталог, который является символической ссылкой на каталог installsitelib.

2 голосов
/ 08 июня 2009

Просто запустите perl -V. В конце будет напечатано значение по умолчанию @INC.

1 голос
/ 08 июня 2009

Зацикливаться на @INC небезопасно, так как он может быть изменен кодом или средой, и, следовательно, может содержать несколько каталогов, заканчивающихся на site_perl.

Если вы пытаетесь определить, где установлен данный модуль, используйте %INC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...