If your code is just checking $numeric each time you should be using elseif instead of if, it might work out much faster (although it still wouldn't explain why your code isn't working).

This also might be a place where using goto will be the most efficient method.

ie.

Code:
raw *:*:{
  goto $numeric {
    :001
    ;dostuff for numeric 001
    goto end
    :002
    ;dostuff for numeric 002
    goto end
    ;more numerics here!
    :error
    if (? /goto: * iswm $error) reseterror
    :end
  }
}


Spelling mistakes, grammatical errors, and stupid comments are intentional.