If your application is threaded, you would usually end up with using much more memory, as there are resources you would replicate for each thread. Especially for 5.8 thread, there are lots of memory leaks.
To help measure threaded application, you may want download Benchmark::Thread::Size to help. This module is from CPAN. It reports memory usage for pieces of source code in a threaded application.
Circular ref and recursive call
Recursive calls can increase memory usage very quickly.
There is also something called circular ref, which causes memory leak in old versions of Perl. In old versions, circular ref can easily escape first phase of garbage collection. A sample would be:
It seems that each instance of $var would be freed up at the end of each loop, but in old perl, that's not the case. All 10000 $var would exist up to the end of the execution.