Not if you rely on randomization: give every XP point a 0.1% chance per day of expiring. Older XP will then get a higher probability of dying off than younger (an XP is dead with probability 1-0.999age). You don't need to recompute everyone's totals every day, either, although to be completely accurate you would have to recompute on any day that a user's XP total changed.

I'm not too crazy about the XP rot idea, though.

I think the XP ramp should be closer to quadratic. Tune it so that the top two or three levels are empty (give everyone something to reach for). Or better yet, make the upper levels require more than just XP -- make people earn a certain number of "quest" points. Quests could be proposed by anyone (including monks eligible for advancement); when a monk claims to have accomplished a quest, other monks vote on how much credit should be given. Your vote would be weighted by the logarithm of your own XP or something (or just by your level, if XP requirements are exponential!). If some minimum number of monks have voted and the average value has stabilized for a few days, award the points.

The sorts of quests I'm thinking of are things like writing a review, releasing a CPAN module, writing a test suite for someone else's module, implementing a feature for the perlmonks site, etc. Hmmm... or in some cases, deleting a CPAN module (by merging its functionality with another).