The || is being parsed wrong; use another delimiter for your s///. Also you have a couple of typos past that. A corrected version could look like:
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 = <IN>) {
++$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;
}
}
}