in reply to Using # inside qw()

Your use of q instead of qw is probably the issue. You are assigning a single string to @c, and then trying to extract the third value (index 2) which isn't defined.
my @c = qw' # % ( / 3 6 7 @ B C G Q R ^ s t ~ ';
It's one of those "off-by-one" letter errors.

Update: LD2 helped point out that this will generate a warning "Possible attempt to put comments in qw() list" when run with '-w' and 'strict', although it does print '(' as being $c[2]. I'm upgrading to 5.6.1 from 5.6.0 on the test system right now just to make sure there's no additional problems.
Update2: No additional problems in 5.6.1. It runs with the same '-w' warning about comments.