-2

我是 Perl 编程的新手,想了解以 Perl 模块的形式构建一段代码的最佳方法是什么。它应该提供一个框架,使“数据”可以在不影响代码的情况下增长/缩小。

本质上,程序需要执行 3 个不同的事情(“数据”部分):

  1. 从多个文件(整个文本)中收集文本,具体取决于主机上安装的 RPM(RPM 名称 = 'A'、'B'、'C' 分别为参数)。文件列表将会增长,并且应该存储在一个简单的外部化文件中,该文件应该易于编辑。
  2. 在操作系统 (Linux) 上运行操作系统命令并将命令的输出捕获到文本文件中,具体取决于安装在主持人。
  3. 在特定数据库上运行数据库命令(我们称之为“DBA”、“DBB”、“DBC”,3 个数据库对应于 3 个主机)并将输出捕获到文本文件,具体取决于哪个 RPM(RPM 名称 = 'A' , 'B', 'C' 分别为参数)安装在主机上。

我需要以如下方式对逻辑进行编程:

  1. 必须有一个“RPM 到文件/命令/DB-command”的映射,它很容易与主 Perl 程序分开编辑
  2. 文件的数量、它们的名称/位置 + OS + DB 命令预计会发生变化,因此应该可以轻松地与主 Perl 程序分开编辑
  3. RPM 名称和对上述数据的映射可以更改,因此应该很容易与主 Perl 程序分开编辑

到目前为止我研究过的想法:

  1. 散列的散列(在 Perl 模块中)
  2. 数组数组(在 Perl 模块中)
  3. 外部 XML
  4. 外部键值对文件

有关执行此操作的最简单和最简单的方法的任何指导?说明性代码将非常有益。

4

1 回答 1

1

存储配置的方式取决于它的复杂程度,以及对没有对系统进行编程的人必须能够访问它的程度。

将配置存储为 Perl 代码的好处是,解析非常便宜。但是,可能存在安全问题,因为配置文件不会被加载,而是被执行。此外,这是一个可怕的设计。

XML 非常灵活,但是 (a) 手动编辑很糟糕,并且 (b) 处理起来比其他解决方案更昂贵[需要引用]

如果您的配置数据可以很容易地表示为键值对,那就去做吧。否则,请查看 JSON 或 YAML,它们将为您提供所需的所有功能(大部分时间)。


我会以这样的方式编写系统,即在程序开始时加载一个主对象。构造函数将 RPM 类型作为参数,并处理适当的配置文件。

然后,您将为此对象创建一个接口,以便处理文本文件、运行系统命令和运行数据库查询将使用正确的配置值。

只需确保使您的代码美观且通用,这样程序的主要逻辑就不需要知道它正在使用什么 RPM,除非在初始化时。

Perl 类通常同时是一个模块。在合理的情况下,根据需要创建辅助模块。



示例构造函数:

package MyObject;
use strict; use warnings; use Carp;
use YAML qw(LoadFile);
my $config_file_dir = "/foo/bar/";
sub new {
   my ($class, $type) = @_;
   do_rpm_type_sanity_check($type) or confess qq(Invalid type given: $!);
   my $self = LoadFile($config_file_dir . $type . ".yaml");
   do_config_sanity_check($self) or confess qq(Really weird configuration: $!);
   bless $self, $class;
}

示例用法

#!/usr/bin/perl
use strict; use warnings;
use MyObject;

my $type = magically_get_type();

my $obj = MyObject->new($type);
...; # do something useful with the object.
于 2012-12-14T20:37:26.650 回答