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

时间:2009-06-08 13:22:12

标签: perl

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

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

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

4 个答案:

答案 0 :(得分: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

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

C:\Temp> perl -V:.*site.*
Windows上的

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

in * nix shells。

答案 1 :(得分:5)

是否有理由不使用其中一个模块安装程序(ExtUtils::MakeMakerModule::BuildModule::Install)?

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

答案 2 :(得分:2)

只需运行perl -V。它将在最后打印默认的@INC。

答案 3 :(得分:1)

循环@INC是不安全的,因为它可以被代码或环境修改,因此可能包含以site_perl结尾的多个目录。

如果您要确定安装给定模块的位置,请使用%INC