If you use diagnostics perl will tell you which category the warning belongs to. For example, printing an uninitialised variable yields (the category is in bold):
in reply to Re^2: Annoying 'Use of uninitialized value in concatenation' warning
in thread Annoying 'Use of uninitialized value in concatenation' warning
Use of uninitialized value $x in print at
Additionally, perldiag lists all of perl's warning and error messages.
/home/bri/foo.pl line 14 (#1)
(W uninitialized) An undefined value was used as if it were already
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.