gpt4 book ai didi

perl - perl 中的@INC 有问题吗?

转载 作者:行者123 更新时间:2023-12-04 22:31:46 25 4
gpt4 key购买 nike

假设我们是 perl 新手并写了一些很棒的模块 MyModule.pm .我们还写了一些很棒的脚本 myscript.pl ,即需要使用该模块。

use strict;
use warnings;
use MyModule;
etc...

现在我们将创建目录 /home/user/GreatScript并将我们的文件放入其中。并试图运行 myscript.pl ...
cd /home/user/GreatScript
perl myscript.pl

伟大的!现在转到另一个目录...
cd /
perl /home/user/GreatScript/myscript.pl

得到一些关于 @INC 的不太有用的错误和路径列表。这是什么?现在经过一番谷歌搜索,我们知道 @INC包含搜索我们模块的路径,这个错误意味着 Perl 无法找到 MyModule.pm。

现在我们可以:
  • 添加系统 PERL5LIB 变量的路径,它会将我们的路径添加到 @INC 的开头
    将我们的模块安装到 @INC 的目录之一
  • 手动将我们的路径添加到 @INCBEGIN部分
    添加 use lib '/home/user/GreatScript';到我们的脚本,但它看起来很糟糕。如果我们将脚本移动到其他目录怎么办?
  • 或使用 FindBin模块来查找我们当前的目录,并在 use lib "$FindBin::Bin"; 中使用此路径,但不是 100% 有效,例如 mod_perl 或 issues 的一些错误...
  • 或使用 __FILE__ (或 $0) 变量并使用 abs_path 从中提取路径来自 Cwd 的方法模块。看起来像另一辆自行车?
  • 或者一些忘记或丢失(我错过了什么吗?)

  • 为什么这种明显且常规的操作需要大量工作?如果我有一个脚本,这很容易......但是为什么我需要为我的所有脚本编写这几行额外的代码呢?而且它不会 100% 起作用!为什么 perl 不将当前脚本目录添加到 @INC默认情况下,就像使用“.”一样?
    PS:我正在寻找我的问题的答案,但仅从上面的列表和其他一些列表中找到解决方案列表。我希望这个问题是重复的......

    最佳答案

    Or some forgotten or missing ( Did I miss something? )



    另一种选择:不要将模块与脚本一起保留。该模块是独立的,因为它是可重复使用的,所以将它放在一个库文件夹中。这可以是本地库中用于个人项目的任何内容,包含在 use lib 中。 (并且可能引用您为项目设置的环境变量),使模块成为 CPAN 库,并让 cpan管理它的去向。你决定做什么取决于你的代码的可重用性,而不是脚本如何使用它。

    Why this obvious and regular operation need a lot of work?



    在事物的计划中,这不是很多工作。您期望在文件系统中组合在一起的文件应该由 Perl 在语言级别自动使用来解析 requireuse陈述不正确。不是不可能,也不是你的期望不合理,只是 Perl 不是这样实现的。事后改变它可能会影响现有项目的工作量,并且可能会引起争议——因此不太可能改变。

    关于perl - perl 中的@INC 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19723918/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com