My approach to learning CS has been to start projects. I come up to a wall, bang my head, and eventually find how OO, grammars, graphs or exception handling can help me. It's all CS, but in relation to a real project. Any sufficiently advanced project will pull in quite a bit of CS. As someone else suggested, reading perlmonks is a great way to learn.
For books, Higher Order Perl is outstanding (although I've barely scratched the surface.) Mastering Algorithms in Perl is a good reference in theory; in practice, I haven't needed what it offers, although knowledge of algorithms appears to be foundation for many CS courses.
Finally, learning version control (principally git) has dramatically changed how I work. If you do a project of 50 lines or more, you need this!