如何找到Perl的标准site_perl目录?

Mat*_*son 5 perl

如何找到标准的site_perl(非特定于arch)位置?只是循环遍历@INC并找到以"site_perl"结尾的路径,或者是否有标准的方法来执行此操作是否安全?

试图找到这个的原因是,我有一个非常大的项目,由数百个单独的模块构建,所有模块都有自己的Makefile.PL文件(几乎每个.pm文件都被构建为自己的CPAN样式模块).除此之外,每个模块可能在各个位置都有工件(模板,.cgi等),所有这些都需要部署到不同的位置,没有什么是标准的.这是尝试控制它的第一步,基本上只有一个可以查找和部署所有内容的Makefile,下一步将是在版本控制中以合理的布局获取它.

我花时间尝试使用标准安装工具,但没有运气.

Sin*_*nür 8

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
Run Code Online (Sandbox Code Playgroud)

或者,正如@ysth在评论中指出的那样,您可以使用:

C:\Temp> perl -V:.*site.*
Run Code Online (Sandbox Code Playgroud)

在Windows和

 $ perl '-V:.*site.*'
Run Code Online (Sandbox Code Playgroud)

在*nix shell中.


yst*_*sth 5

有没有理由不使用其中一个模块安装程序(ExtUtils :: MakeMaker,Module :: Build,Module :: Install)?

但如果必须,该目录可用(加载后Config)为$Config::Config{'installsitelib'}.请注意,某些平台可能会配置perl此目录不会出现在该目录中@INC,而是具有一些符号链接到该installsitelib目录的其他目录.