如何使用beta Perl脚本中的beta Perl模块?

前端之家收集整理的这篇文章主要介绍了如何使用beta Perl脚本中的beta Perl模块?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我的Perl代码具有生产代码位置和“beta”代码位置
(例如,生成Perl在/usr/code / scripts中编码,BETA Perl代码在/usr/code / beta / scripts中;生成Perl库在/usr/code / lib / perl中,这些库的BETA版本在/中usr / code / beta / lib / perl,有没有简单的方法让我实现这样的设置?

具体要求是:

>代码必须是生产和BETA位置的相同.

为了澄清,为了将任何代码(库或脚本)从BETA推广到生产,需要发生的唯一事情就是从BETA到prod位置发出cp命令 – 文件名和文件内容必须保持相同.
> BETA版本的脚本必须调用其他BETA脚本和BETA库(如果存在)或生产库(如果BETA库不存在)
>除了基本目录(/usr/code / vs /usr/code / beta /)之外,BETA和生产之间的代码路径必须相同
>脚本必须全部位于相同的基本目录下,但它们可能位于任意深度级别的子目录中(这排除了第31.13节中经典的使用lib“$FindBin :: Bin /../ lib”解决方案.使用lib “编程Perl”)

我将介绍我们如何解决问题作为这个问题的答案,但我想知道是否有更好的方法.

解决方法

我们自己的解决方案如下:

>有一个图书馆(我们称之为BetaOrProd.pm)

>必须通过“使用BetaOrProd”包含库.在每个脚本中
>在“use strict”之后,库必须是每个脚本中的第一个使用语句.编译指示(如果我们使用它,则使用“警告”).包括任何BEGIN块之前.
>库有一个BEGIN块,其中包含大部分逻辑
>库中的BEGIN块检查程序的目录路径(基于$0并且应用了绝对路径)
>如果目录路径以/usr/code / beta开头,则认为该程序在BETA位置运行,否则在生产中运行
>在任何一种情况下,/usr/local / lib / perl都不会移位到@INC列表的开头
>如果BETA位置,/usr/code / beta / lib / perl在此之后未被转移到@INC列表的开头.
>如果BETA位置,则特殊变量$isBETA(可通过从BetaOrProd.pm导出的访问器方法访问)设置为“BETA”.

>只要脚本/库需要调用另一个脚本,就会根据从BetaOrProd.pm导出的$isBETA变量的访问器来计算被调用脚本的路径.
>无论何时需要或使用Perl库,都不需要特殊的逻辑 – 由BetaOrProd.pm修改的@INC负责了解模块的导入位置.如果模块位于BETA位置,那么BETA位置的库将被BETA脚本使用,否则库将来自prod位置.

这种方法的主要缺点是:

>要求每个脚本都必须“使用BetaOrProd;”作为“use strict”之后每个脚本中的第一个使用语句附注.

我们公司要求每个部署的代码都通过自动验证器,这可以检查这一要求,从而减轻了这一缺陷.
>不能通过/usr/code / beta / lib / perl测试BetaArProd.pm. D’呃.

通过对库的非常彻底的单元和集成测试来缓解

猜你在找的Perl相关文章