Please note: It's not just for exporting subs. Symbol::List::symbols returns a list of symbols, which can be useful in many ways. If it were just for exporting, I'd probably have created Exporter::ExportAll :)
Only lexicals are private, and those aren't in the symbol table. Naming a sub so it starts with an underscore means it's "private" in many cases, but doesn't have to.
grep is great for selecting things, and it's not hard at all:
grep !/^_/, symbols('CODE'); # non-"privates"
grep !/[^A-Z0-9_]/, symbols('CODE'); # "constants"
2;0 juerd@ouranos:~$ perl -e'undef christmas'
Segmentation fault
2;139 juerd@ouranos:~$