my @files = qw(quotePAGE1 quotePAGE2); for (@files) { open IN, $_ or die "failed opening file $_, at"; $\ = "\n\n"; my $num = 0; my($chunk,$q_num,%s_nums,%auth,@s,%subj); while($chunk = ) { ++$num; $chunk =~ s|^/-a(\S+)[^/n]*\n|| or die "no author? file $_, chunk $num; at"; $a = $1; while($chunk =~ s{/-s(\S+)[^\n]*\n/-q((?:.|\n)+?(?=/-))}{}) { $q_num = 0; $auth{$a}->[$q_num] = $2; @s = split /,/,$1; for (@s) { (undef($s_nums{$_}) && $s_nums{$_} == 0) || ($s_nums{$_} += 1) } $subj{$_}->[$s_nums{$_}] = $2 for @s; } } }