0

Perl スクリプトでは、pm ファイルから構成の詳細を取得しています。ユーザーがスクリプトのインターフェースを使用して構成の詳細を変更した後、同じ値が pm ファイルに書き戻されます。

たとえば、次のconfig.pmファイルがあります。

$SourcePrimUserHost = '10.226.33.233';
$SourcePrimUserPort = '33002';
$SourceGroupsHost = '10.226.33.233';
$SourceGroupsPort = '33002';

これらの値を Perl スクリプトから読み取っています。更新された値をconfig.pmファイルに保存したい。

どうすればこれを行うことができますか?あなたの助けを楽しみにしています。

4

2 に答える 2

12

これは良い設計上の選択ではありません。

  1. Perl モジュールは、ユーザーが読み込めるが書き込めないようにインストールすることができます (すべきです!)。
  2. モジュールが複数のユーザーまたは複数の Perl プログラムによって使用される場合、conf はアプリケーション固有ではなく、システム グローバルになります。
  3. プログラムの複数のインスタンスが同時に実行されると、問題が発生します。

JSON、Freeze/Thaw、Dumper は他の候補かもしれませんが、YAML のようなデータ シリアル化形式を使用することをお勧めします。この構成は、別のファイルに保存することをお勧めします。

データを同じファイルに保存する必要がある場合は、トークンを使用できます__DATA__。その背後にあるものはすべてDATAファイルハンドルとしてコード内でアクセスでき、perl によって実行されることはありません。構成を更新するときにこのトークンを見つけるのも簡単です。モジュールが呼び出された場合Foo::Bar:

my $serialized_stuff = ...;
my $self_loc = $INC{"Foo/Bar.pm"}; # %INC holds the location for every loaded module.
my $tempfile = ...;
open $SELF, "<", $self_loc or die ...;
open $TEMP, ">", $tempfile or die ...;
# don't touch anything before __DATA__
while(<$SELF>) {
  print $TEMP $_;
  last if /^__DATA__$/;
}
print $TEMP $serialized_stuff;
close $TEMP; close $SELF;
rename $tempfile => $self_loc or die ...;
于 2013-02-11T06:57:42.120 に答える
5

CPANのConfig::Generalのような多くの設定ツールの 1 つを使用します。それらは使いやすく、さまざまな表記法をサポートしており、値をテキスト ファイルに書き戻すことができます。

于 2013-02-11T07:02:59.787 に答える