代码之家  ›  专栏  ›  技术社区  ›  Matthew Watson

如何找到Perl的标准站点目录?

  •  5
  • Matthew Watson  · 技术社区  · 16 年前

    我怎样才能找到标准站点的位置?仅仅循环@inc并找到以“site\u perl”结尾的路径是安全的,还是有一种标准的方法可以做到这一点?

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

    我花了很多时间试图用标准的安装工具来完成这项工作,但我运气不好。

    4 回复  |  直到 16 年前
        1
  •  8
  •   Sinan Ü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
    

    或者,正如@ysth在注释中指出的,您可以使用:

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

    在Windows和

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

    在*nix炮弹中。

        2
  •  5
  •   Sinan Ünür    8 年前

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

    但是如果必须,目录是可用的(在加载之后 Config 作为 $Config::Config{'installsitelib'} . 请注意,有些平台可能会配置 perl 这样这个目录就不会出现在 @INC ,而不是拥有一些其他与 installsitelib 目录。

        3
  •  2
  •   jiggy    16 年前

    只是运行 perl -V . 它将在末尾打印默认的@inc。

        4
  •  1
  •   Chas. Owens    16 年前

    循环不安全 @INC 因为它可以通过代码或环境进行修改,因此可能包含多个以site_Perl结尾的目录。

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