#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
die "Usage: $0 input_file\n" unless @ARGV;
my $in_file = $ARGV[0];
my $result = [];
my $block_start = 'objet => debut';
my $block_end = 'objet => fin',
my $rec_skip = '...';
{
open my $fh, '<', $in_file;
while (<$fh>) {
chomp;
next if $_ eq $rec_skip or $_ eq $block_end;
if ($_ eq $block_start) {
push @$result, {};
next;
}
my ($key, $value) = split /\s*=>\s*/;
$value =~ s/^"?(.*?)"?$/$1/;
$result->[-1]{$key} = $value;
}
}
use Data::Dump;
dd $result;
####
$ ./pm_11142528_parse_file.pl
Usage: ./pm_11142528_parse_file.pl input_file
####
$ ./pm_11142528_parse_file.pl not_a_file
Can't open 'not_a_file' for reading: 'No such file or directory' at ./pm_11142528_parse_file.pl line 17
####
$ cat pm_11142528_parse_file.txt
objet => debut
index => 1
a => "premiere valeur"
...
z => "dernier mot"
objet => fin
...
objet => debut
index => 77
a => "autre valeur"
...
z => "aurai-je le dernier mot ?"
objet => fin
####
$ ./pm_11142528_parse_file.pl pm_11142528_parse_file.txt
[
{ a => "premiere valeur", index => 1, z => "dernier mot" },
{ a => "autre valeur", index => 77, z => "aurai-je le dernier mot ?" },
]