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

Is there any place I can learn Perl online, beyond basics? I like to learn different modules and their practical usage. I can go on reading manuals and practice the code, solve the problems here and talk with people, but I am looking for better approach, to learn a thing at a time and learn well.

Seriously, at the moment I don't know any better place than the monastery!

Best approach is to get involved in others problems and to try to figure out the best solution strategy (not the fastest solution). IMHO there is no better way to learn than to explain to others. It's win-win.

The second best approach is to ask good questions.

...what I mean: Good questions are elaborated and precisely leading to the crucial point. They show what was already tried (also searching the archives) and could be tried. They have a higher degree of "why" than "how". This doesn't mean they have to be long and heavy worded, they just lead to a good entry level.

IMHO there are not many learning strategies more profound than dialogic learning, just to add some Socrates! :)

So if you're interested in special moduls, check the archives and post good questions about them, introducing and interesting others to join learning ...

Old threads can always be reanimated, and if there are no old threads, motivate why there should be.

... for me, the best way to learn is to start writing programs, and see what problems you encounter..... everyone runs into the same types of problems over and over, so to really learn, you should force yourself to write something complex..... then you get a handle on data structures and all the advanced stuff like db access, threads, ipc, and all the things you see discussed here.

....personally, in my learning process, i evolved in a few steps, from programs where everything is simple scalar variables, onto arrays, then finally to hashes and all the AoA, HoA, etc etc stuff.

.... in general, you will find that most modules are like blessed hashes.... so you need to get your mind set into seeing things as a complex data structure ...... this is best accomplished by forcing your mind to design some.... like a "story book" problem of grade school, where the teacher asks you to actually use math to model and solve a real world problem

.... so choose some project that interests you, and start writing it....it goes step by step.... first you lay out the skeleton of the program, then step by step adding more complexity( watching for possible bugs each step of the way, and saving all developmental scripts, so you can fallback in case you make a design mistake

...you will not learn much by just reading other people's code....it's 90% perspiration.... so start writing and running code, and modifying other's code, and see what the modifications do.....

zentara++! For me, programming is a learning by doing exercise. Find a problem that interests you; try to code it. If you don't succeed, look around and read stuff. If you already know coding basics, then learning Perl is more a matter of getting deeper into specifics. For those going from basics to mastery, you might want to look at such resources as the "Higher Order Perl" web pages.

You seems to emphasize on Perl things and module constructs rather than module itself. I am looking for a knowledge 'WHAT a module can do'. The implementation is secondary. Consider Template Toolkit or CGI::Application or Moose or even List::AllUtils. A brief course on these modules can help me tremendously to use them in my practices. 'What' is often an unknown territory and cannot come fully via dialogic approach because often it will miss your observations. Unless introduced in school, we may never be able to figure out the formula of H2O unless you are genius.
I am not saying that I cannot pickup Perl on my own. I am just saying a fundamental introduction of these new concepts that programming introduces on top of school learning, must be practically usable with speed to shorten the learning curve.

.... you seem to be under the misconception that there is ORDER in all of this module stuff.... you must be coming from a Java background in the universites.. :-)

...this is the way it works.... modules are just giant code efforts to do some task, that everyone previously was doing with separate disparate scripts.... eventually some smarter coders but the code into packages to make it easier for others to use....but there is no rhyme nor reason to what makes it to a module, or even if it works anymore.....

i don't think anyone in the Perl community wants to go thru all the modules out there, and write a book catagorizing what they do for you

...as to what Perl can do for you, it is only limited by your ingenuity and your knowledge of what a computer system can be used for.

...modules are just encapsulated code blocks....if you want to know what they do...look thru all the entries on CPAN, and start downloading and running the examples.....i can't even count the number of times that I've done:

Convince someone to pay you to write code.
That can be a great motivator to learn.

If you're employed,
convince the boss to pay you to do projects using Perl.
If that fails,
identify activities where Perl could save you time and effort,
and do the work on your own time.
If you're not employed,
look at online job shops,
eg, odesk, elance, rent-a-coder, guru.com, expertsExchange.

Join a Perl-based project at sourceforge.net
(or other online repository):
see the 'Project Help Wanted' section.
Find a project that you want to learn,
study its code,
connect w/ the other team members,
add some tests,
fix bugs,
add features.

Online course:
It can offer a structured experience
with homework, grades, tests, discussion boards,
and no commuting needed.
OTOH, at the end of the term, the discussion boards might disappear,
and that data is not avbl unless you saved it locally.

Be a mentor to people looking for help (eg, answer questions at perlmonks).
Teaching something is a good way to learn it.

Write an article about a topic you want to learn.
Make a plan, do the research, write & debug the code.
Commit to a schedule and follow it.
Post it on perlmonks for comment.

Learn to manage your own desktop machine effectively,
so you don't have to rely on the IT help desk.
Perl has many tools for sys admin tasks.
See the books on Perl for sys admin
(eg, Automating System Administration with Perl).
Build your own custom toolbox that you can take with you
to many different work sites.

Here at PerlMonks you got the sections "Tutorials" and "Categorized Questions and Answers", in addition to the various questions being asked around everyday, there is a wealth of knowledge to be picked of course, the thing is if you really want an approach to learn one thing at a time and learn it well,in a systematic progressive way that is well designed you probably need books coupled with the interactivity experienced here at PM because majority of online tutorials for Perl they only serve to introduce you to the language and they are rather confusing, check the Book Reviews and Perl Reference Materials: Books section for relative info about books and for the modules check the Module Reviews section which perhaps can enable you to set priorities straight with regard to which modules are best for you to pick and use for a certain task at hand.

Excellence is an Endeavor of Persistence.
Chance Favors a Prepared Mind.

They say "Perl is just the syntax, CPAN is the language" and things like that. There's some truth to it: learning about modules is just as diverse as learning new languages.

Asking "where can I learned foreign languages" doesn't make much sense, unless you tell us which languages you want to learn. The general answer is "at your local university" or so, which doesn't help you either.

So I suggest you rethink your approach: instead of asking "where can I learn about modules" you start asking "where can I learn how to achieve $goal", and then "which modules can I use to simplify this", and then "where can I learn how to use $module".

The answers depend very much on the specific field, and a general answer is so general that it's useless to you ("on the internet").

As a part-time CS Professor and full-time Software engineer, my advice is to generally forget online tutorials until you need a reference later.

I was hired 10 weeks ago to refactor old code with no previous Perl experience. Online tutorials didn't seem to help me as much as using Perl by Example to learn the basics of Perl and it's OOP styles and then more once I had actually written code to do everything I had read about. Then I went on to Perl Medic which while helpful really didn't teach me in depth on the how-to for making old code refactored into OO...that was when I dove into the code and started actually writing perl for real. After the basics I started using perldoc.perl.org, CPAN and PerlMonks.

Honestly, without the foundation you get in a linearly studied education you will be lost in the real world. No tutorials will help you like a book you can quickly reference...which you will, forever, if you continue with Perl. Currently my desk is littered with the Cookbook, PbyE, Medic and a permanent link to Safari Books Online in my browser for the books I haven't bought hard copies of yet.

It's been 10 weeks, I just finished my first project which is 25803 lines of code. Perl's not hard to learn, it just isn't easy if you don't apply yourself and invest in the right tools...and the previous post about someone paying you definately helps!

Do some stuff. What doesn't matter -- just solve some real problem you have, using Perl. As you do it, look for opportunities to use modules that solve a piece of your problem (manipulating files, downloading web content, parsing data, whatever). And then, for each module that you use, read it. Read the code. Figure out what the weirdness you see is all about. The whole great thing about CPAN is not just that you can use the libraries; it's that they're in source and you can read (and hell, modify) them.