-2

私は Perl プログラミングの初心者で、Perl モジュールの形式でコードを構成する最良の方法についていくつかのアイデアを得たいと思っています。コードに影響を与えずに「データ」が拡大/縮小できるようなフレームワークを提供する必要があります。

基本的に、プログラムは 3 つの異なること (「データ」部分) を実行する必要があります。

  1. ホストにインストールされている RPM (RPM 名はそれぞれ「A」、「B」、「C」) に応じて、複数のファイル (テキスト全体) からテキストを収集します。ファイルのリストは大きくなり、簡単に編集できる外部化された単純なファイルに保存する必要があります。
  2. オペレーティング システム (Linux) で OS コマンドを実行し、コマンドの出力をテキスト ファイルにキャプチャします。ホスト。
  3. 特定のデータベース (「DBA」、「DBB」、「DBC」、3 つのホストに対応する 3 つのデータベースと呼びます) でデータベース コマンドを実行し、どの RPM (RPM 名 = 「A」) に応じて出力をテキスト ファイルにキャプチャします。 、'B'、'C' がそれぞれホストにインストールされます。

次のような方法でロジックをプログラムする必要があります。

  1. メインの Perl プログラムとは別に簡単に編集できる「RPM からファイル/コマンド/DB コマンド」へのマッピングが必要です。
  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 タイプを引数として取り、適切な構成ファイルを処理します。

次に、このオブジェクトへのインターフェイスを作成して、テキスト ファイルの処理、システム コマンドの実行、および DB クエリの実行で正しい構成値が使用されるようにします。

初期化時以外は、プログラムのメイン ロジックがどの 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 に答える