in reply to Multiple Choice Quiz

For your second version I'd suggest changing
while (<QSTNS>) { $_ =~ /^(Quiz)(\d)$/; $max = $2; }
to
while (<QSTNS>) { ($max) =~ /Quiz(\d)/; }
It's more Perlish and clearer.
Also,
$_ =~ /([^,]+),([^,]+),([^,]+),([^,]+)/; push (@A,$1); push (@B,$2); push (@C,$3); push (@D,$4);
could be much more efficent using split. -- Dave