我是Perl编程的新手,想了解一下以Perl模块的形式构造一段代码的最佳方法。它应该提供一个框架,使“数据”可以在不影响代码的情况下增长/缩小。
基本上,程序需要执行3个不同的事情('数据'部分):
我需要以这样一种方式对逻辑进行编程:
到目前为止我研究过的想法:
有关最简单,最简单的方法的指导是什么?说明性的代码将非常有用。
答案 0 :(得分:1)
如何存储配置取决于它的复杂程度,以及对未编程系统的人员的访问权限。
将配置存储为Perl代码的好处是,解析非常便宜。但是,可能存在安全问题,因为配置文件不会被加载,而是被执行。而且,这是一个可怕的设计。
XML非常灵活,但是(a)手动编辑非常糟糕,并且(b)处理成本比其他解决方案 [citation needed] 。
如果您的配置数据可以非常容易地表示为键值对,那就去做吧。另外,看看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.