The source of the undefined value is the call to charblock. The docs for Unicode::UCD in regards to its charblock routine states, "If the argument is not a known character block, 'undef' is returned".
A couple of solutions might be:
my $c = charblock($uChar) || $uChar; # default to original value
# or
my $c = charblock($uChar) or next; # skip iteration