I'm not really sure what you're trying to do, but I'm assuming that it will be easier for you if you can read the blocks into a data structure. This code reads the blocks into a hash of arrays. The keys of the hash are 'A' and 'B' and the blocks are put into the appropriate spot in the arrays depending on their id.
use strict; use warnings; use Data::Dumper; my %blocks; local $/ = ''; while (<DATA>) { my ($type) = /block_type=(A|B)/; my ($id) = /block_id=(\d+)/; unless ($type && $id) { warn "Invalid block syntax in record $.\n$_\n"; next; } $blocks{$type}[$id] = $_; } print Dumper \%blocks; __DATA__ # A type A block block_type=A block_id=1 magic=true unlikeliness=2 # Another type A block block_type=A block_id=2 magic=false unlikeliness=9 # A type B block block_type=B block_id=1 colour=green warty=false horns=1 # Another type B block block_type=B block_id=2 colour=red warty=false horns=7 # A further type B block block_type=B block_id=3 colour=red warty=true horns=1
"The first rule of Perl club is you do not talk about
Perl club."
-- Chip Salzenberg
In reply to Re: Parsing a file comprising blocks and comparing the blocks
by davorg
in thread Parsing a file comprising blocks and comparing the blocks
by loris
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |