Slashdot Mirror


Learning Perl, 4th Ed.

Craig Maloney writes "Just about everyone out there who has ever typed #!/usr/bin/perl has encountered Learning Perl (otherwise known as "The Llama Book") in one form or another. You may have learned some of the intricacies of the language from this tome, or you've seen someone recommend this book to potential Perl programmers on-line. Learning Perl is generally in the top three recommended books for new Perl programmers, next to Programming Perl ("The Camel Book"). Now in its fourth edition, Learning Perl returns with updates covering the stable 5.8 series of Perl. The changes are subtle, but the improvements make for a clearer and more readable book." Read on for the rest of Maloney's review. Learning Perl, Fourth Edition author Randal L. Schwartz, Tom Phoenix and brian d foy pages 304 publisher O'Reilly rating 9 reviewer Craig Maloney ISBN 0596101058 summary The fourth edition of the classic text for learning the Perl language.

When I was initially introduced to Perl, I was one of those who was recommended to read Learning Perl. I picked up the initial edition (with the mauve binding), and began my journey into Perl. What I found was a dense, hard-to-follow introduction to the language, with the experienced Perl programmer in mind. I realized that the tutelage of this experienced programmer/author might be useful, but I opted for other books instead. As others looked to me for book recommendations, I recommended other works for people looking to immerse themselves in Perl, and relegated Learning Perl to the section of my library where live books with a steep learning curve (similar to the learning curve experienced by many with Kernighan and Ritchie's classic The C Programming Language). Like The C Programming Language, however, a full grasp of the language is not achievable from texts where the central focus is to avoid using the lingo and customs of those who are more familiar with the language. Only by full immersion in the culture of the language can one become fully proficient in that language. What's new? Learning Perl 4th edition has been updated in several ways from the previous edition. The text has been updated to reflect Perl 5.8, although this book doesn't introduce any 5.8 specific concepts. The new edition was reorganized from the previous version. The chapter on Regular Expressions is enhanced, and file handles are introduced in the I/O Basics chapter. CPAN is introduced in Learning Perl, since it has become much more important to beginners. The chapter on flat-file databases (DBM/DBM Hashes) didn't make the cut for this edition, but a good portion of the chapter made its way into Chapter 9 (Processing Text with Regular Expressions). The book has a cleaner feel to it, and flows without the erratic feel of the previous editions. What's good Learning Perl could rightly be called A Tourist's Guide to the Perl Culture. The material is immersive, and teaches Perl using the verbal language of a Perl programmer. No attempt is made to dumb down the material. This leads to sentences in the book like the following: Alas, these aren't words as you and I are likely to think of them; they're those \w-type words made up of ordinary letters, digits, and underscores. The \b anchor matches at the start or end of a group of \w characters. The previous sentence makes perfect sense for those who have already grasped the fundamentals of regular expressions, but for those who aren't quite up to speed, the previous sentence warrants further study. This can be a blessing or a curse for some. Ultimately, it forces the reader to understand the Perl culture which can only improve the reader's understanding of Perl. Also of note are the footnotes. Almost every page in the book contains footnotes commenting (sometimes sarcastically) about the topic at hand. Sometimes the footnotes can be distracting, as your eyes will busily look for the next humorous footnote, such as this little gem: And /,{5}chameleon/ matches "comma comma comma comma comma chameleon". By George, that is nice. What's Bad The only complaint I can level at Learning Perl is that there could be more explanation for some of the concepts in the book. In the section called "More Regular Expressions," the book presents the following example:

Here's the text:
I'm talking about the cartoon with Fred and Wilma!
And here's a substitution to remove those tags. But what's wrong with it?
s#(.*)#$1#g;
The problem is that the star is greedy. What if the text had said this instead?
I thought you said Fred and Velma, not Wilma
In that case, the pattern would match from the first to the last , leaving intact the ones in the middle of the line. Oops! Instead, we want a non-greedy quantifier. The non-greedy form of star is *?, so the substitution now looks like this:
s#(.*?)#$1#g;
And it does the right thing.
Unfortunately the less astute reader may not understand what exactly happened here. One line of output with the end result would help clarify what this regular expression did.

What's in it for me? Learning Perl would rightly be regarded as one of the classic texts for Perl programmers to read through at least once in their Perl careers. The book is chock-full of useful information, and even experienced Perl coders would do well to at least leaf through the pages of this book for paradigms to help their coding. Absolute beginner programmers would likely find this text a little over their heads, but intermediate programmers will find Learning Perl a valuable resource in their road to proficiency with Perl. You can purchase Learning Perl, 4th Edition from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

42 of 172 comments (clear)

  1. Refreshing... by op12 · · Score: 4, Insightful

    Finally, a book review that's actually a review and not a summary or a novel in itself. Well done.

    1. Re:Refreshing... by larley · · Score: 2, Insightful

      Amazon has quite a good return policy which lasts a few weeks, I think. You can probably send it back without much of a problem, giving the reason that a new edition just came out -- Unless it's already in bad, dog-earred condition... Which wouldn't surprise me, given the usefulness of the book. :D

  2. Question by rk_cr · · Score: 4, Interesting

    I've got a question. I haven't read through it yet, but I've got a borrowed copy of 4th edition. Should I bother to read through it, or should I hold out for finding a 5th ed?

    1. Re:Question by Tackhead · · Score: 2, Funny
      > I've got a question. I haven't read through it yet, but I've got a borrowed copy of 4th edition. Should I bother to read through it, or should I hold out for finding a 5th ed?

      According to the Slashdot blurb up there, "The changes are subtle, but the improvements make for a clearer and more readable book."

      So I'd say - if you enjoy Perl, stick with the 4th edition. All those backticks, quotation marks, slashes, and punctuation marks are there for a reason. Subtlety? Yes. But for readability?!?! "Die!"

    2. Re:Question by merlyn · · Score: 3, Informative

      We pitched this book to O'Reilly as "the last edition before Perl6 comes out". So, that's the scoop. One last chance to get Learning Perl for Perl5 correct. And apparently, we did the job.

  3. Perl6 is a mistake by Anonymous Coward · · Score: 2, Informative
    I've been using perl pretty much constantly since the Pink Camel, and believe me, Perl 5 is an extremely good language for quick scripting things. That's what it was designed for. Sure, you can do big projects in it, but it's not exactly ideal. Recently I've started using Ruby as well, and I intend to move my department over to it instead of wasting time with Perl 6.

    One of the goals of Perl 6 is to make non-trivial projects possible. That's good. The way it's being done is bad. Perl was once a lightweight, extremely flexible language. Now it's become a huge ugly monster. People wanted OO, so a nasty hack was bolted on top to allow some semblance of it. Now this nasty hack is being expanded. Sure, the code's different, but the basic form is the same. Kludge upon kludge upon kludge; I'd much rather have a nice, clean, pure language (and not one with loads of irritating whitespace thank you very much).

    The same goes for the syntax. All the switching between $, @ and % is really irritating (ask a newbie how to get at the length of the keys array of a hash inside a hash, for example), and the changes proposed for 6 are just making this worse -- it seems that Larry, in his infinite wisdom, wants to prefix every data type with a different hard-to-type character. Perl was only designed for the three data types, and adding more is a mess.

    Perl 6 is a complete rewrite, but it keeps all the mess which has accumulated over the previous versions. This is not good. Sure, my const int $var = 27; may look neat (in the same way that, say, Pascal does), but $var isn't entirely constant, or entirely an integer, it's just a hack which makes it sort of behave like one. The whole thing is an exercise in pseudo-computer science masturbation with little real purpose except to please the managers who dislike the one thing that makes Perl special.

    On a similar note is regexes. I'm an avid fan of regular expressions simply because a nondeterministic finite automata is far more flexible than linear code. However, Larry must have been smoking that cheap $2 crack when he wrote this. Does he want Perl 6 to be flex or something?

    I won't be going on to use 6. It's a nice idea, but it's completely unnecessary. It won't make large projects any easier to manage (the language is still, at heart, an almighty hack -- an impressive one, but still a hack). It won't make OO any cleaner. It won't make development any faster. To put it bluntly, Perl scripts will still look less beautiful than our friend Mr Goat.cx. I'd prefer to use a language which has always been pure synthesis of science and engineering, not some half-baked imposter.

    Perl 6 will be nice, but I'm guessing it will be the end of Perl. It can't do what it wants to do whilst still being based upon a nasty mess. There are now other options, which provide all of Perl's power and none of the mess. Sorry, but *BSD^H^H^H^H Perl is dying. Larry is buggering it up the ass without lubricants, just like Shoeboy is doing to Larry's daughter.

  4. What's wrong with the example? by scribblej · · Score: 2, Interesting

    Here's the text:

    I'm talking about the cartoon with Fred and Wilma!

    And here's a substitution to remove those tags. But what's wrong with it?

    s#(.*)#$1#g;


    Uh... everything? What tags? Am I nuts, or doesn't s#(.*)#$1#g; always replace the entire string with itself? What could be more useless?

    1. Re:What's wrong with the example? by Rosco+P.+Coltrane · · Score: 2, Funny

      Uh... everything? What tags? Am I nuts, or doesn't s#(.*)#$1#g; always replace the entire string with itself? What could be more useless?

      Hmm, perhaps s#(.*)##g; ?

      --
      "A door is what a dog is perpetually on the wrong side of" - Ogden Nash
    2. Re:What's wrong with the example? by Yath · · Score: 4, Informative

      Since it says something about removing tags, I'd guess that the reviewer's angle brackets got removed by Slashcode. It's probably something like:

      s#<(.*)>#$1#g;

      Which is indeed a good example of a bad regex.

      --
      I always mod up spelling trolls.
  5. Out of the way Jesus by Anonymous Coward · · Score: 3, Funny

    Larry is my savior.

  6. Recommended books by Rosco+P.+Coltrane · · Score: 5, Funny

    Learning Perl is generally in the top three recommended books for new Perl programmers

    The other two being this one, and this one.

    --
    "A door is what a dog is perpetually on the wrong side of" - Ogden Nash
  7. Nice review by $RANDOMLUSER · · Score: 5, Funny

    > s#(.*?)#$1#g;
    But why the cartoon swearing??

    --
    No folly is more costly than the folly of intolerant idealism. - Winston Churchill
  8. Hated it by jafac · · Score: 3, Informative

    While, ultimately, I'm reserving Perl as a skill ONLY used when absolutely necessary (ie. when I get stuck debugging someone else's code) - I didn't like Learning Perl, or Programming Perl, or Perl in a Nutshell. All three of these books left me frustrated and completely lost.

    In sharp contrast, the Perl Cookbook, gave me answers to all of my questions. I recommend Perl Cookbook to anyone. The other books? Only to masochists.

    --

    These are my friends, See how they glisten. See this one shine, how he smiles in the light.
    1. Re:Hated it by holy+zarquon's+singi · · Score: 2, Informative

      I tend to concur, although Learning Perl Objects, References and Modules is a pretty good read and a good companion to the cookbook.

      --
      "...we should just trust our president in every decision that he makes and we should just support that." B.Spears 2003
    2. Re:Hated it by PCM2 · · Score: 2, Informative

      I sort of concur, though you have to start somewhere just to pick up the syntax of the language. For that, I used Programming Perl (the bigger, more reference-oriented book). Probably the most enlightening one I read was Advanced Perl Programming, which has also just been updated. That was the one that made me say, "Ah-haaaaaa, so there's more to this than CGI scripts."

      --
      Breakfast served all day!
  9. regex by __aahsof7392 · · Score: 3, Informative

    Example makes no sense.

    $ echo "I'm talking about the cartoon with Fred and Wilma!" | perl -pe 's#(.*)#$1#g;'
    I'm talking about the cartoon with Fred and Wilma!
    $ echo "I thought you said Fred and Velma, not Wilma" | perl -pe 's#(.*?)#$1#g;';
    I thought you said Fred and Velma, not Wilma

    1. Re:regex by slavemowgli · · Score: 2, Informative

      The author just forgot to escape some < and > characters in there, so part of the regexes gets interpreted as HTML.

      And of course, the Slashdot editors didn't catch that, but that's probably hardly surprising...

      --
      quidquid latine dictum sit altum videtur.
  10. Re:Could substitute -freenode #perl for this by EnronHaliburton2004 · · Score: 2, Insightful

    ...since half the people in that room have a bind setup to spam the address of Learning Perl in response to any question,

    And that's one of the reasons why Perl is heading into oblivion. Rude users. Sometimes I'll be there, a newbie will ask a newbie question, and 5 zealots will jump down their throat.

    Worse then #debian sometimes, and that's hard to beat.

  11. the review by Amouth · · Score: 3, Insightful

    from the looks of it, seems like a nice book but what we need is, a book that beats people into submission so that they make READABLE perl .. 99% of the perl i look at makes me want to kill someone.. (i make sure someone else is in the room)

    --
    '...if only "Jumping to a Conclusion" was an event in the Olympics.'
    1. Re:the review by chromatic · · Score: 3, Insightful

      Perhaps you'll like Perl Best Practices then.

    2. Re:the review by Tsiangkun · · Score: 5, Insightful

      Not trolling here,

      When kids learn to read, they sound out each letter.
      Then readers progress to sounding out each syllable.
      Advanced readers can read in words instead of syllables, and no longer sound out each piece.
      Really advanced kids read in phrases and sentences.

      Perl is like learning to read two languages at once. One needs to develop proficiency in regular expressions, and the Perl language itself to be able to read Perl script effectively.

      Most of what people bitch about is the regular expressions, and not the Perl itself. Yes, the syntax might be tweaked on the Perl implementation of regular expressions, but if you understand them well in another form, it's not mind boggling. The tight integration of regular expression and a programming language leads to elegant problem solving methods, and I appreciate them the same way I appreciate a koan.

      Once someone can read and write, they seldom use the same expressions as someone new to a language. This only further alienates newbies and adds to the theory that Perl is unreadable line noise. Perl is Perl, and one either gets it or they don't. No amount of formatting will make it any clearer if the reader only knows baby speak for either regular expressions or the Perl language.

  12. Re:Could substitute -freenode #perl for this by jez9999 · · Score: 2, Insightful

    What's that you say? A pedantic language that requires you to use whitespace to specify blocks and doesn't massively improve on Perl is going to replace Perl, given that many Perl programmers wouldn't bother switching because of the former reason _alone_, not to mention the fact that they're already satisfied with the ease and elegance of Perl?

  13. Re:Pattern by AuMatar · · Score: 3, Informative

    You can do it similarly in perl-

    \d{3}-\d{4}

    The reason perl implementations tend to look worse is that they try and catch other ways of writing phone numbers- removing the -, adding an area code, optional whitespace, etc.

    --
    I still have more fans than freaks. WTF is wrong with you people?
  14. Cynical O'Reilly marketing exercise by onlyjoking · · Score: 3, Insightful

    The text has been updated to reflect Perl 5.8, although this book doesn't introduce any 5.8 specific concepts.

    So how exactly does this edition "reflect" Perl 5.8 then? Is is it enough just to drop a reference to 5.8 and leave it at that? This book is nothing more than a cynical O'Reilly marketing exercise. The sample chapter from O'Reilly is identical to the corresponding chapter in the 3rd edition while a brief look at the table of contents shows nothing more than a re-arrangement of the previous edition. Anyone who has the 3rd edition will be wasting their money buying this book.

    1. Re:Cynical O'Reilly marketing exercise by merlyn · · Score: 3, Informative
      Actually, can I be honest?

      We didn't really have 5.8's differences in mind. However, we made sure that the exercises were not invalidated by 5.8.

      So yeah, you got us. It's a marketing ploy.

      However, we did do more than "rearrange" things. We're constantly updating our Llama class, and the latest changes were indeed dragged back into this book. So, you've got the best of an already good class, as updated by people that are teaching it every week.

  15. The regex example as it should have displayed: by Craig+Maloney · · Score: 4, Informative

    Here's the text:
    I'm talking about the cartoon with Fred and <BOLD>Wilma</BOLD>!

    And here's a substitution to remove those tags. But what's wrong with it?

    s#<BOLD>(.*)</BOLD>#$1#g;

    The problem is that the star is greedy. What if the text had said this instead?

    I thought you said Fred and <BOLD>Velma</BOLD>, not <BOLD>Wilma</BOLD>

    In that case, the pattern would match from the first <BOLD> to the last </BOLD>, leaving intact the ones in the middle of the line. Oops! Instead, we want a non-greedy quantifier. The non-greedy form of star is *?, so the substitution now looks like this:

    s#<BOLD>(.*?)</BOLD>#$1#g;

    And it does the right thing.

    1. Re:The regex example as it should have displayed: by msblack · · Score: 2, Funny

      and now the review makes sense.

      --
      signature pending slashdot approval
  16. Little Point Learning Perl If Not Already Learned by aldheorte · · Score: 2, Interesting

    Some may consider this a troll, but, knee-jerk reactions aside, from a professional standpoint, unless you have to maintain some legacy system that uses Perl, or an interest in historical programming languages, there is very little point in learning Perl. You can find all of its benefits in more modern non-compiled languages without the cruft of years of esoteric development. I will not mention other languages as that will just start a religious war over everyone's pet language, but, seriously, aspiring technologists take note and do your research.

    If you already know Perl, that's great and good that you learned it when you learned it, but it doesn't change the above.

  17. I waiting for perl.NET to be released! by bubbaD · · Score: 2, Funny

    I joke, I joke. I have Visual Python!

    1. Re:I waiting for perl.NET to be released! by truckaxle · · Score: 2, Informative

      Why is this funny? I have sitting on my desk "Programming Perl in the .Net Environment" by Yevgeny Menaker, Michael Saltzman and Robert j. Oberg published by Printice Hall. The book is about 2 years old now.

  18. Python, not anymore. Ruby, maybe but doubt it by systems · · Score: 2, Insightful
    Why? Mainly the OO paradigm, big turn off

    Okay, I am one of those, generalists, prgrammer wannabe.
    I have spent time with, C, C++, Objective-C, OCaml, Python, Java, Bash scripting, Perl, Tcl, Sql and maybe others.
    And even thought Python was kind sometime, my main pick, I had to give up on it.
    Python is hard, harder to learn than even C.
    Learning how to program in OO, is hard, and python, regardless of what you say doesn't make it easier.
    To really understand the different programming paradigm, you have to learn more than one language, an programmer who haven't look on at least 5 languages shoul question his own skills.
    Anyway, Perl biggest assets in my opinion, are
    • The wealth of it's literature, you can find a Perl book covering almost any programming corner and topic.
    • That Perl book, will be effectively teaching you a CPAN library
    Python, will never have that, mainly because no other language have that, Perl is unique in this. Plus OO programming, is just tuff to swallow, in theory, I would say OO offer a very nice level of uniformity and abstraction to any program, but in real life, it's just easier to deal with the mess of procedurla programming. And don't think of data, and behavior owners.

    Good luck with your Pythonic dreams, but ... honestly, I wouldn't recommend Python, well not anymore.

    1. Re:Python, not anymore. Ruby, maybe but doubt it by renoX · · Score: 3, Insightful

      Well of course if you're used to Perl, OO programming will seem very hard to learn :-)

      For learning OO programming, I'd advise 'Object-Oriented Software Construction' it use Eiffel as its programming language, and is quite old but it is very, very clear about why OO programming makes sense.

      And for me, Python or Ruby (preferably) are better than Perl because those language have a readable syntax by default, in Perl you have to fight the language to produce readable code, thus a big majority of Perl code is just unreadable, barf.

  19. I keep a copy of Perl 5 for Dummies on my desk... by suitepotato · · Score: 2, Funny

    ...just to remind me that there are things in this world less sane than C++ but oddly more seductive.

    The other Perl books I keep in my private collection with my BSD books hidden behind a box of pr0n tapes and DVDs so no one thinks I'm a total perv.

    --
    If my grammar and spelling are off, I am [distracted/tired/careless] (take your pick)
  20. Re:PP 4th ed.? by merlyn · · Score: 2, Informative

    Camel 4ed will likely come out after Perl6. So Camel 3ed is likely the last Perl5 edition.

  21. Re:I wouldn't buy anything from this author by merlyn · · Score: 4, Interesting
    It takes an AC to make a libelous statement like that.

    I encourage you to review every article I've written there, and come to your own conclusion. I'll stand by my public record.

  22. Beginning Perl by Simon Cozens by systems · · Score: 2

    I am learning Perl using Beginning Perl
    And I am really satisfied with it, it's free, it's comprehensive and it's author is a skilled Perl hacker.

    I would like to know, what more does Learning Perl have to offer? (For one it's not free!)
    If it's depth, I plan to use the perldoc and perlmonks.org for the depth. And beginning perl just for the big picture (not that it doesn't offer depth, it does to a great degree).

  23. Re:Perl Runs Slashdot? by merlyn · · Score: 3, Insightful
    Yes, Slashcode is Perl.

    With respect to Rasmus, whom I've met on more than one occasion, I've often said:

    PHP is "training wheels without the bicycle"
    I'll leave it to you to discover why I say that.
  24. Re:I wouldn't buy anything from this author by Camel+Pilot · · Score: 4, Informative

    I just read the last 40 posts of one Mr Randal L. Schwartz on PerlMonks as per his link here and found none to be aggressive or unprofessional and instead helpful if not patient. Sorry AC you must have some axe to grind.

  25. CPAN - take a look by oo_waratah · · Score: 2, Insightful

    The reason I use and recommend perl over other languages is the useful INDEXED source of common modules called cpan.

    This single resource has saved me many hours of programming alone. More than pays for some of the obscure problems. Frankly it is up to the programmer to write good code, not the programming language. I can show you horrible code in about 20 different languages from Cobol to C to Java to Perl. Learn how to write and comment clearly and any language is a good language.

  26. Re:Perl Runs Slashdot? by lupin_sansei · · Score: 2, Insightful

    PHP being more secure than perl. You're joking right?

    Where's PHP's equivalent of perl's taint mode? Where's the PHP's equivalent of perl's "use warnings" and "use strict"? Where's PHP's equivalent of DBI's parameterised queries?

    And have you seen the amount of entries for PHP on bugtraq: http://www.securityfocus.com/swsearch?query=php&sb m=%2F&submit=Search!&metaname=alldoc&sort=swishran k

  27. Re:Perl Runs Slashdot? by pudge · · Score: 3, Insightful

    Perl was never designed for the web. PHP was designed from the ground up to be a web scripting language. As such, it blows the doors off of Perl in terms of speed, funtionality, ease-of-use, deployment, understanding and security. PERIOD.

    Except, no, it doesn't. PHP is not faster. Most people say this when what they mean is that PHP has a smaller memory footprint, and can therefore handle more connections on a given machine. I will grant this, but we have no problem adding more hardware, as it is a negligble cost in the grand scheme of things.

    Functionality? Are you kidding? There's nothing PHP can do that Perl can't, but Perl can do much PHP can't.

    Ease-of-use, deployment, and understanding are in the eye of the beholder. I understand Perl quite well, thanks very much. That (hypothetical) you don't puts no obligation on me to stop using Perl.

    As to security: why is it that we are almost constantly seeing CSS and other vulnerabilities for Slash-a-likes written in PHP, but almost never see the same for Slash itself, which is written in Perl? Granted, it could be that PHP is more secure but Slash's programmers are just superior. :-)

    But Slashdot is an uber minority when it comes to selecting Perl as the real-time scripting language to use on the web. They've done a fine job, but if the application were written in PHP instead of Perl, it would likely perform twice as fast.

    Thank you. But no, it likely would not be faster, since the bottleneck is not Perl, but the database. You might contend that if we wrote it in PHP, it would take fewer machines to get handle the same number of queries, but that would mean using a language that we like less, are less familiar with, and which has a whole host of problems with functionality that we'd have to spend more time (read: money) to work around.

    only crazy people use it in high-traffic, mission critical, real-time enviroments like ./

    People keep saying that as if the facts -- for both Slashdot and LiveJournal, as well as others -- don't absolutely refute the statement.

  28. Re:Perl Runs Slashdot? by Dom2 · · Score: 2, Interesting
    I'm a Perl programmer. I love Perl. But there are a couple of things that PHP really, really does better than Perl (well, mod_perl in particular).
    1. Deployment. Getting stuff into mod_perl isn't as simple as it could be.
    2. Shared Nothing. mod_perl keeps stuff around between requests. This can be useful, but also limiting. In fact, it's been the cause of some of the weirder bugs I've seen. And it stops you deploying two copies of the same mod_perl application into the same server easily.

    Disclaimer: I'm not a PHP programmer, the above is just what I think happens. :)

    Of course, none of this matters for a big site like slashdot, or the ones I develop. But for small people who are just "playing around", it can be a big inhibitor. And that's one reason why I think mod_perl has lost mindset to PHP in the past.

    -Dom