0

目標は決まっているが、そこにたどり着く方法がわからない。あらかじめお詫び申し上げます。

Perl の使用 - 文字区切りのファイル (構造を口述できる) を受け取るので、それを XMLのようなファイルに変換する必要があります。

<MyConfig>
   Active = yes
   Refresh = 10 min
 <Includes>
 <Include_Rule_1>
 Active = yes
 Match = /Foo [Bb]ar/
 </Include_Rule_1>
 <Include_Rule_2>
 Active = yes
 Match = /Baz.*/
<Include_Rule_2>
</Include>
<Exclude>
<Exclude_Rule_1>
Exclude = /Bim Bam/
</Exclude_Rule_1>
 </Exclude>
</MyConfig>

つまり、XMLのようなもの(個々の値は山括弧で囲まれていません) であり、3 つのセクションは一定ですが、その深さは常に不明です。

私は CPAN ライブラリを使用できますが、このスクリプトは、私がアクセスまたは制御できない個々のサーバーで実行する必要があるため、使用したくありません。

何か案は ?スターターポインター?ヒントまたはコツ ?

すみません、ここで迷ってしまいました。

4

2 に答える 2

0

このスターター サンプルのようにTemplate::Toolkitモジュールを使用できます(HASH をフィードするために、最初に入力ファイルを解析する必要があります)。

#!/usr/bin/env perl

use strict; use warnings;
use Template;
my $tt = Template->new;
my $input = {
    MyConfig_Active => "yes",
    MyConfig_refresh => "10 min",
    MyConfig_Include_Rule_1_Active => "yes",
    MyConfig_Include_Rule_1_Match => "/Foo [Bb]ar/"
};
$tt->process('template.tpl', $input)
    || die $tt->error;

template.tplファイル :

<MyConfig>
   Active = [% MyConfig_Active %]
   Refresh =  [% MyConfig_refresh %]
 <Includes>
 <Include_Rule_1>
 Active = [% MyConfig_Include_Rule_1_Active %]
 Match = "[% MyConfig_Include_Rule_1_Match %]"
 </Include_Rule_1>
(...)
</MyConfig>

サンプル出力:

<MyConfig>
   Active = yes
   Refresh =  10 min
 <Includes>
 <Include_Rule_1>
 Active = yes
 Match = "/Foo [Bb]ar/"
 </Include_Rule_1>
(...)
</MyConfig>

http://template-toolkit.org/docs/tutorial/Datafile.htmlを参照してください

于 2013-01-27T16:59:10.367 に答える
0

1 つのオプションは、Config::Generalを使用して、解析された文字区切りファイルの結果から入力するハッシュからそのようなファイルを生成することです。このファイルは、Config::General を使用して簡単に読み取ることができ、ハッシュを再設定できます。

use strict;
use warnings;
use Config::General;

my %config = (
    Active   => 'yes',
    Refresh  => '10 min',
    Includes => {
        Include_Rule_1 => {
            Active => 'yes',
            Match  => '/Foo [Bb]ar/'
        },
        Include_Rule_2 => {
            Active => 'yes',
            Match  => '/Baz.*/'
        }
    },
    Excludes => { 
        Exclude_Rule_1 => { 
            Exclude => '/Bim Bam/'
        }
    }

);

my $conf = new Config::General();

# Save structure to file
$conf->save_file('myConfig.conf', \%config);

の内容myConfig.conf:

<Excludes Exclude_Rule_1>
    Exclude   /Bim Bam/
</Excludes>
Refresh   10 min
<Includes>
    <Include_Rule_1>
        Match   /Foo [Bb]ar/
        Active   yes
    </Include_Rule_1>
    <Include_Rule_2>
        Match   /Baz.*/
        Active   yes
    </Include_Rule_2>
</Includes>
Active   yes
于 2013-01-27T22:21:56.753 に答える