- With use strict; you wouldn't have run into your problem in the first place. Yes, it's more work, but that's because writing a clean script is always more work than writing a ball of mud.
- $sum{$user} += $size; You should look into what these operators do - your use of ++$size indicates you have not at all understood what ++ and friends do.
- I don't know why stat is giving you problems because for me it works; I can stat things I have no permissions of any kind to. It makes sense too because it's reading the inode to get that info, so all you need is permission on the directory the object is in to be able to resolve the name to an inode.
(Disclaimer: Criticism is no personal judgement, all of us are still learning.)
Makeshifts last the longest.