my @p; while () { push @p, [], if /^Window/; push @{$p[-1]}, $_; } #### my %h; while () { $key = $1, next if /^Window ([^:]+)/; push @{$h{$key}}, $_; }