The heap is the global amount of memory allocated to your program. The stack is a special part of the heap, which stores data in the "last in, first out" mode. It's used to store the data currently processed; for instance when entering a block, variables local to that block are allocated to the stack by growing it; the memory is freed from the stack when leaving the block.
The stack is much faster (you have only one available element at the time) to access. None of this is perl-specific, though, and perl inherited its stack and heap from C.