2

多年来,我一直使用 perl 作为一种在生成动态网站时操作 MySQL 文件的方法。当我在 perl 4 的日子里学到了我的技能时,我采用了一些不一定适用于 perl 5.10 的做法

一种这样的做法是将敏感和静态信息 - 例如 MySQL 用户名和密码 - 作为全局标量变量存储在 blah.cfg 文件中,然后将其放置在文档根目录之外 - 正如我多年来所做的那样。

然后我在我的 perl 顶部附近有一条线:

require "./../../data/blah.cfg";

因此我可以使用变量来访问数据库。

当我添加时,我的问题开始了:

use strict;
use warnings;

然后我不能拥有这些全局变量,因为它们当然会抛出错误。因此,今天经过数小时的研究后,我似乎在翻阅信息,发现不应再使用“要求”,而应改为“使用”。这似乎是一场火灾的洗礼:库,包,模块等......如果模块在路径之外,我需要使用 FindBin 来定位它 - 但如果我使用的是 mod_perl 则不需要......

有没有一种简单有效的方法来存储两个简单的变量并以安全的方式检索它们?

4

3 回答 3

1

您可以使用一个实际的配置文件(和类似 Config::Any 的东西),或者如果您继续使用 Perl 模块,只需正确执行即可。

use strict;
use warnings;

package MyConfig;

use Exporter qw( import );

our @EXPORT = qw( %config );

our %config = (
   ...
);

1;

然后你可以使用

use MyConfig qw( %config );
... $config{...} ...

(不要使用“Config”作为模块名称;它已经存在。)

于 2012-12-14T20:07:37.867 回答
0

您可以将文件路径存储在您创建的 perl 模块中。然后,在该模块上创建一个 getter 方法以返回文件路径。

在您的主脚本中,“使用”该模块并在需要文件路径时调用 getter。

使用该模块将类似于全局变量。文件路径只会存储在一个地方(改进维护),但它可以在任何地方访问(甚至是其他脚本)。

我不记得 Perl,但我认为您必须在作为整个系统一部分的任何单独脚本中“使用”您的模块。

于 2012-12-14T19:56:33.583 回答
0

将配置数据存储在配置文件中而不是其他脚本中会更好。有很多模块可以为您解析配置文件。

编辑:

为什么首先在文档根目录中有任何代码?总的来说,这似乎是一个坏主意,不管整个敏感的配置问题如何。

于 2012-12-14T19:58:44.540 回答