我正在尝试在多行配置文件中读取记录到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)
阅读本文的最佳方式是什么?模块?正则表达式与多行匹配?蛮力?我在空中接下来要去哪里.
这是您的数据集的一个选项:
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 $/ = ''结果将空行视为数据集中的"记录分隔符",因此我们可以在这些记录上使用正则表达式来获取散列键/值的信息.
希望这可以帮助!