- define $VERSION in all packages, sync them in all files before release
- define $VERSION in all packages, but these are internal version numbers (update only when package changes)
I personally prefer one of these two. I dislike distributions where modules don't have a set version, or inherit one from a base package.
This is due to the (unfortunately) many times where I've been faced with the contents of an @INC that's been an unholy mixture of different modules form different distributions. Being able to track down the version numbers of different modules has been a godsend in those instances - and a complete pain when absent.