如何找到标准的site_perl(特定于非拱门)位置?只是循环遍历@INC并找到以“site_perl”结尾的路径,或者是否有标准的方法来执行此操作是否安全?
试图找到这个的原因是,我有一个非常大的项目,由数百个单独的模块构建,所有模块都有自己的Makefile.PL文件(几乎每个.pm文件都被构建为自己的CPAN样式模块)。除此之外,每个模块可能在各个位置都有工件(模板,.cgi等),所有这些都需要部署到不同的位置,没有什么是标准的。这是尝试控制它的第一步,基本上只有一个可以查找和部署所有内容的Makefile,下一步将是在版本控制中以合理的布局获取它。
我花时间尝试使用标准安装工具,但没有运气。
答案 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::MakeMaker,Module::Build,Module::Install)?
但如果必须,该目录可用(在加载Config
后)$Config::Config{'installsitelib'}
。请注意,某些平台可能会配置perl
,使得此目录不会出现在@INC
中,而是将其他目录与符号链接到installsitelib
目录。
答案 2 :(得分:2)
只需运行perl -V
。它将在最后打印默认的@INC。
答案 3 :(得分:1)
循环@INC
是不安全的,因为它可以被代码或环境修改,因此可能包含以site_perl结尾的多个目录。
如果您要确定安装给定模块的位置,请使用%INC
。