Do you have memory leaks? They're harder to come by in Perl code than in a language like C or C++, though still possible. It's pretty old, but there is Devel::LeakTrace, if you believe you have one you need to track down. For me sometimes a first step is to create a test that puts a module through a lot of iterations, and then just observe "top". Old fashioned, but low effort. If that turns up anything interesting, then I spend the time to dig deeper. The two most common sources of memory leaks in Perl are circular references, and buggy XS code.
As for CPU optimization, profile first (Devel::NYTProf), and if you really do have a problem somewhere, then you can Benchmark alternatives.