pmu has asked for the
wisdom of the Perl Monks concerning the following question:

Respected Monks,

I have been dabbling with Perl once in a while. I have automated a few things at work. However, there are many a times when I feel getting more acquainted with Perl will do me good as I will be able to write better scripts. Furthermore, in current economy and job market, for a storage admin, knowing Perl really well could also be considered an added advantage. And for that, I will be really thankful if the benevolent monks could help me with the questions below.

Good Books - Any suggestions or pointers would be immensely helpful.Yes, a quick google search could reveal more, but I am looking for some books that the monks here consider worthy.

Choice of OS - All of the Management workstations we use are Windows Based. Though I have some familiarity with Linux, would it help if I learn Perl on a Linux Box? Is there any advantage in doing so? I don't think that it would matter to recruiters if I use Linux or Windows to write Perl scripts but in case it would, I would be glad if someone could point out so (or otherwise).

Foremost apologies if any questions asked here appear irrelevant. I am just trying to find ways to get really get good at Perl.

Intermediate Perl -- Teaches you about references, packages, objects, and an intro to testing.

Programming Perl -- Great detail on the language, and one of the best treatments on Unicode I've seen.

Advanced Perl Programming -- Older book, but learn far more than everything you ever wanted to know about typeglobs, as well as intro to parsing, using templates, a brief tutorial on Perl XS and Inline::C.

Perl Cookbook -- Older book, but much of it is still relevant. It's helpful in learning idiomatic Perl, and "get the job done" Perl, though some of the idioms may have been superseded by now.

Modern Perl -- Learn how people are using Perl in the 21st Century. Intro to Moose, more on testing, modern good practices and idioms.

Higher Order Perl -- Never fear wielding callbacks and coderefs again. Learn how to apply functional techniques to Perl.

Perl Best Practices -- Ok, so some of them fizzled, and some were controversial, but if you learn anything from this book, learn to think in terms of best practices (not necessarily to blindly follow the ones asserted in the book).

Programming the Perl DBI -- Older book, but IMHO, before you can hope to make good use of DBIx::Class, you should understand how DBI works, and this book will get you there.

Mastering Algorithms with Perl -- Older book, and some of it is not modern-day idiomatic Perl. But algorithms themselves don't change much over the years, and I still refer back to it from time to time. It was one of the most approachable algorithms books I ever read.

Perl Testing: A Developer's Notebook -- If you aren't writing tests, there's more to learn. :)

This is an incomplete list. There are also the specialization books; a book on LWP, a book on XML, a book on using TT2, a book on CGI (CGI is becoming irrelevant, but understanding the mechanics of a stateless ecosystem is still good knowledge, as it's still applicable in web development). There's a good network programming book too.

There's an Apress book by Sam Treagar on writing modules for CPAN.

And then there are the books that aren't Perl-related, but that approach topics that Perl can be applied to. My personal opinion is there's never a shortage of topics to read up on. ;)

"Mastering Regular Expressions" by Jeffrey Friedl and "Higher Order Perl" by Mark Jason Dominus (free ebook available for the latter) are the two books I would strongly recommend.

Though I have some familiarity with Linux, would it help if I learn Perl on a Linux Box? Is there any advantage in doing so?

There are lots of perl functions that map pretty much directly to syscalls on linux, but which are usually awkward or not implemented on windows (for example handling symlinks). See for example the sections "Input and output functions" and "Functions for filehandles, files, or directories" in perlfunc.

If you want to learn to use those, doing it on linux would make things much easier. On the other hand if you plan to stay on windows, there's not much point.

A very good way to become a better programmer (not just perl) is to participate in the community (for example sites like perlmonks and stackoverflow). That way you get to read some code that other people wrote, plus some suggestions on how to improve it, and some tricks for implementing things that you would never invent yourself.

An even more direct approach would be to find somebody who reviews the code you write for work, and gives you suggestions on how to improve it.

Foremost apologies if any questions asked here appear irrelevant.

They aren't. Similar questions have been asked before, but right now I can't find any similar nodes.

perldocs itself is a good start: http://perldoc.perl.org/index-language.html

Though I have some familiarity with Linux, would it help if I learn Perl on a Linux Box?

Not from my point of view, first you need to get familiar with the language, afterwards you can think of different OSes. The differences are mainly paths and especially packages, some packages are considered Linux/Posix-only, but the most important things are available in both worlds.

Thanks for the good question; I've appreciated the answers as well. I have enjoyed doing much of what was mentioned above, such as going through the code/writing my own packages, and trying new things. In addition, here are my takes/recommendations on a few books:

Modern Perl (by chromatic) was the first one I picked up, but I found the structure of it a bit difficult for a newbie. I switched to Learning Perl and Beginning Perl to better effect. I especially recommend Beginning Perl.

Intermediate Perl and Programming Perl are next on my list. Programming Perl is supposed to be one of the classics, and bears Larry's name itself.

I haven't heard it mentioned much, but I am ABSOLUTELY impressed with "Mastering Algorithms with Perl," which is the equivalent of a data structures text book executed in Perl and has loads of hints that help to understand the guts of Perl (not to mention countless insights and code samples about referencing and doing all kinds of clandestine things with hashes, arrays, and references).

I'm sure you've seen the first two around everywhere; the last one supplements them with verbose warnings that give you full suggestions on what the problem might be, often including working suggestion examples. Not necessary for Perl pros, but if you are like me and can get lost in obscure meanings of the brackets, parenthesis, and commas, diagnostics is a life saver.

I am running out of words to thank you Monks. I guess this is why they say "PerlMonks is the best way to learn Perl". Man, you guys rock. Its amazing that so many of you take time to write a genuine response to a query. I got truckloads of suggestions on everything I asked for and some more...Generally, people scoff at questions like "which versions of Linux", but not here...Thank you very much all.

The Perl language, itself, is comparatively small. The best way I know of to “learn it” is to continue “automating things at work.” Then, when $work is not giving you particular things to do, just make-up something to do, and do it. Make something substantial, consisting of multiple modules and OOP, since that will be the most-realistic scenario.

Learning to program a computer is like learning to swim ... books can only take you so far.

But, with Perl, “swimming” (“DWIMming?”) is really only a small part of it, because Perl (more-so than many other languages) comes with a marina full of boats of all shapes and sizes. Usually, when you start on a project with Perl, you do so by picking-out a handful of well tested “boats” then stitching them together with code of your own devising. “Learning about Perl” therefore has a lot to do with “learning about CPAN.”

Thanks to virtual-machine technology (e.g. VMWare or VirtualBox), and dirt-cheap real-big external hard drives, the Linux environment is very easy to get to now. I”d strongly suggest familiarizing yourself with it a-n-d Windows. Learn about Perl in both environments.

“Learning about Perl” is an abstract target ... you can’t hit that ... make it concrete. Make it a bunch of little concrete stepping-stones.

e.g. write a small utility that excerpts important information from logfiles / commands and displays this info in a convenient manner. (If that is actually possible due to the GUIshness of Windows applications.)

Ada Lovelace for the palindrome
Albert Einstein for having smelly feet
Alfred Nobel for his contribution to battlefield science
Burkhard Heim for providing the missing link between science and mysticism
Claude Shannnon for riding a unicycle at night at MIT
Donald Knuth for being such a great organist
Edward Teller for being the template for Dr. Strangelove
Edwin Hubble for pretending to be a pipe-smoking English gentleman
Erwin Schrödinger for cruelty to cats
Hedy Lamarr for weaponizing pianos
Hugh Everett for immortality, especially for cats
Isaac Newton for his occult studies
Kikunae Ikeda for discovering the secrets of soy sauce
Larry Wall for his website
Louis Camille Maillard for discovering why steaks taste good
Marie Curie for the shiny stuff
Nikola Tesla for the cool cars
Paul Dirac for speaking one word per hour when socializing
Richard Feynman for his bongo skills
Robert Oppenheimer for his in-depth knowledge of the Bhagavad Gita
Rusi P Taleyarkhan for Cold Fusion
Sigmund Freud for his Ménage ā trois
Theodor W Adorno for his contribution to the reception of jazz
Wilhelm Röntgen for the foundations of body scanners
Yulii Borisovich Khariton for the Tsar Bomba
Other (please explain why)