How is DRUPAL_CACHE_PER_USER handled for anonymous users? If a block is set to use DRUPAL_CACHE_PER_USER for caching, will the block be unique for each anonymous user, or the same for all anonymous users?

For reference from API docs:
hook_block_info
DRUPAL_CACHE_PER_USER

Looking at includes/common.inc source it appears to be based on uid, so I'd assume it would use the same block for all anonymous users (uid = 0), but wanted to double-check in case I could use this instead of DRUPAL_NO_CACHE (doing geolocation-driven results in the block).

elseif ($granularity &amp; DRUPAL_CACHE_PER_USER) {
  $cid_parts[] = "u.$user-&gt;uid";
}


(lines 6084-6086)
Yes. If a user is not logged in then uid is 0. So all anon users share the same user id.

I guess you will have to do your own caching, e.g. based on the IP address.