在perl中解析文本配置文件

时间:2014-07-14 21:24:17

标签: perl parsing text

大家好,所以我有一个看起来像这样的配置文本文件。

$name
search_key,0x0

$name2
search_key2,0x1

每个块可以有多个条目,如下所示

$name
search_key1,0x1
search_key2,0x0

可能还有不止一个值。

$name
search_key, 0x1, 0x0

我的目标是使用每个$ name重命名文件,然后在文件中搜索关键字并更改值,例如search_key1可能具有0x0的原始值,该值将更改为0x1。 / p>

我已经完成了我想要做的第二部分,将值硬编码到我的脚本中,但我不能为我的生活弄清楚我应该以什么方式解析文件而且我有长期以来我的所有想法都陈旧了,任何人都有任何建议吗?我甚至不知道在这个阶段采取哪个方向

1 个答案:

答案 0 :(得分:1)

我建议您使用yaml作为配置文件,而不是编写自己的解析器配置文件和解析器。

以下是像您这样的yaml数据文件的样子。

---
- file
- key:
    search_key:
      search: 0x1
  name: Name
- file
- key:
    search_key1:
      search: 0x1
    search_key2:
      search: 0x0
  name: Name2
- file
- key:
    search_key3:
      replace: 0x0
      search: 0x1
  name: Name3

以下是数据的外观:

my $data = [
    file => {
        name => 'Name',
        key  =>  { 'search_key' => { search => '0x1' } }
    },

    file => {
        name => 'Name2',
        key => {
            search_key1 => { search => '0x1' },
            search_key2 => { search => '0x0' }
        }
    },

    file => {
        name => 'Name3',
        key => {
            search_key3 => { search => '0x1', replace => '0x0' }
        }
    }
];

因此$data->[2]->{file}->{name}将是Name3$data->[2]->{file}->{key}->{search_key3}->{search}0x1,关联的->{replace}0x0

如果以这种方式设置数据,可以使用for循环遍历$ data arrayref的元素。