in reply to Parsing a file comprising blocks and comparing the blocks
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
|
|---|