#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my (%HoAoH, $page, %H); while (){ chomp; if (/^Page/){ (undef, $page) = split /\s+=\s+/; } elsif (/^\[Start]/){ %H = (); } elsif (/^\[End]/){ push @{$HoAoH{$page}}, {%H}; } else{ my ($key, $value) = split /\s+=\s+/; # updated to produce output suitable for HTML::Template #if ($key eq 'varname'){ # $varname = $value; #} #elsif ($key eq 'varval'){ # push @AoH, {$varname => $value}; #} $H{$key} = $value; } } print Dumper(\%HoAoH); my @page2 = $HoAoH{'second page'}; __DATA__ Page = first page [Start] varname = name1 varval = val1 [End] [Start] varname = name2 varval = val2 [End] Page = second page [Start] varname = name11 varval = val11 [End] [Start] varname = name21 varval = val21 [End] #### ---------- Capture Output ---------- > "C:\Perl\bin\perl.exe" sara.pl $VAR1 = { 'second page' => [ { 'varname' => 'name11', 'varval' => 'val11' }, { 'varname' => 'name21', 'varval' => 'val21' } ], 'first page' => [ { 'varname' => 'name1', 'varval' => 'val1' }, { 'varname' => 'name2', 'varval' => 'val2' } ] }; > Terminated with exit code 0.