Perl - 从配置文件中读取多行记录

Dou*_*las 1 perl

我正在尝试在多行配置文件中读取记录到perl哈希数组中

示例配置文件:

    record_1
      phone=5551212
      data=1234234
    end_record_1

    record_2
      people_1=bob
      people_2=jim
      data=1234
    end_record_2

    record_3
     people_1=sue
    end_record_3
Run Code Online (Sandbox Code Playgroud)

这就是我要找的东西:

$myData{1}{"phone"}  <--- 5551212
$myData{1}{"data"}   <--- 1234234

$myData{2}{"people_1"} <--- bob
... etc
Run Code Online (Sandbox Code Playgroud)

阅读本文的最佳方式是什么?模块?正则表达式与多行匹配?蛮力?我在空中接下来要去哪里.

Ken*_*sis 8

这是您的数据集的一个选项:

use strict;
use warnings;
use Data::Dumper;

my %hash;
{
    local $/ = '';
    while (<DATA>) {
        my ($rec) = /record_(\d+)/;
        $hash{$rec}{$1} = $2 while /(\S+)=(.+)/g;
    }
}

print Dumper \%hash;

__DATA__
record_1
    phone=5551212
    data=1234234
end_record_1

record_2
    people_1=bob
    people_2=jim
    data=1234
end_record_2

record_3
    people_1=sue
end_record_3
Run Code Online (Sandbox Code Playgroud)

输出:

$VAR1 = {
          '1' => {
                   'data' => '1234234',
                   'phone' => '5551212'
                 },
          '3' => {
                   'people_1' => 'sue'
                 },
          '2' => {
                   'people_1' => 'bob',
                   'data' => '1234',
                   'people_2' => 'jim'
                 }
        };
Run Code Online (Sandbox Code Playgroud)

设置local $/ = ''结果将空行视为数据集中的"记录分隔符",因此我们可以在这些记录上使用正则表达式来获取散列键/值的信息.

希望这可以帮助!