Ну да, Перл память не возвращает. Он ее потом снова пытается использовать. Но в больших и сложных скриптах часто (точнее почти всегда) случается так, что Перл периодически берет понемногу все новые блоки памяти. И если скрипт работает очень долго, внешне это может выглядеть так, как будто у него утечка памяти (хотя это не утечка, он как бы все за собой подчищает, но для ускорения работы ему проще запросить у системы новый блок памяти, чем пытаться найти свободный в своем сборщике мусора. Все это очень сильно зависит от того, что и как делает скрипт. Там много тонких моментов, что и как нужно и не нужно делать, но полного контроля над памятью все равно не добиться, Перл будет есть столько, сколько посчитает нужным. В одном скрипте я даже свой хеш реализовал, чтобы контролировать потребление памяти, но она все равно утекала в других местах.
Но на вебсервере это обычно не является большой проблемой, потому что после окончания работы скрипта память возвращается системе (это не относится к mod_perl, там всегда нужно быть очень осторожным).