in reply to Is this normal

You're making two mistakes:
  1. You're calling the match in list context, so an empty list is returned, reducing the number of passed parameters.
  2. Even when called in scalar context, a non-match does not return 0. It returns the empty string (most Perl build-ins that return either a true or a false value, return 1 or "")