Perl 更常称为变量声明

Posted

技术标签:

【中文标题】Perl 更常称为变量声明【英文标题】:Perl more often called variable declaration 【发布时间】:2020-11-22 02:04:38 【问题描述】:

我必须为一个项目编写脚本。由于我们有结构化的文件夹(在 Linux 环境中),因此可以根据我们创建的每个模块放置脚本。

例如,我正在从事项目 XYZ,对于这个项目,我必须在 Module_XYZ 中编写我的脚本(大多数是 Perl)。所有(公共)模块的路径是/home/shared/Mining/

我的项目模块(Module_XYZ)进入/home/shared/Mining/。所以我必须在 /home/shared/Mining/Module_XYZ/ 中编写脚本

由于我必须更频繁地(在脚本中)使用此路径,而不是一次又一次地提及此路径,所以我将在脚本开头存储在环境变量中。

our %ENV;
if ( !defined( $ENV'MOD_PATH' ) ) 
    $ENV'MOD_PATH' = "/home/shared/Mining/Module_XYZ/";

ENV 变量中添加此路径并在需要时调用$ENV'MOD_PATH' 是否是个好主意, 还是我应该将其声明为常量,例如:

use constant MOD_PATH => "/home/shared/Mining/Module_XYZ/";

或 简单地去

$MOD_PATH = "/home/shared/Mining/Module_XYZ/";

需要专家建议。 TIA。

【问题讨论】:

看看***.com/questions/84932/… 【参考方案1】:

最好不要在代码库中的任何地方提及/home/shared/Mining 之类的东西,而是使用相对目录并从项目文件夹运行脚本。这将使项目更具可移植性。

如果您的脚本(.pl 文件)在 Module_XYZ 中导入 .pm 文件,那么它应该使用use lib 'Module_XYZ' 设置@INC,并且脚本应该从/home/shared/Mining 目录或@987654326 的任何位置运行@ 位于。

如果Module_XYZ 包含一些其他文件,那么您应该再次引用它们相对于当前运行脚本的目录,例如(-f Module_XYZ/foo.txt)

使用常量或仅使用 my $MOD_PATH = "MODULE_XYZ" 比阅读 $ENVMOD_PATH 好一点,因为如果出现拼写错误或 $MOD_PATH 不在范围内或不存在,则会出现编译错误。

【讨论】:

use lib 'Module_XYZ'; 应该是 use FindBin qw( $RealBin ); use lib $RealBin;(或 "$RealBin/lib" 等)。依赖 . 作为脚本的目录会咬你

以上是关于Perl 更常称为变量声明的主要内容,如果未能解决你的问题,请参考以下文章

Perl 词法范围变量在声明中的效率

变量定义与变量声明

如何声明变量,如何给变量赋值

PHP中的严格模式

像 Python 这样易于学习的语言,但需要变量声明?

在 Python 环境中管理 Perl 习惯