If you had used warnings or ran your script as perl -w 1041970.pl, Perl would've given you a hint on what goes wrong:
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
Use of uninitialized value in numeric comparison (<=>) at tmp.pl line
+10.
APR12 MAR13 APR11 MAR12 FEB13 APR13
Now, the task is to find out why $mon->{$a} might be undef. You could for example do a first simple sanity check:
...
use Data::Dumper;
exists $mon->{JAN}
or die "Couldn't find entry for 'JAN' in " . Dumper $mon;
That should give you a hint on how to proceed.