in reply to Comparing arrays and returning false if an exception is found

If you are wondering why your code returns "Supported", it is because both arrays contain the 2 strings: "Accounting" and "Dnd". According to the documentation, your grep returns the value of 2, which is true in the if statement:
In scalar context, returns the number of times the expression was true.

It becomes more obvious if you add these lines of debug code:

my $num = grep ($seen{$_}, @SupportedPTs); print "num=$num\n";

On another note, you could save yourself some typing by using the qw operator:

my @ProblemTypes = qw(Accounting Dnd test);