Learning Perl, 4th Ed. 172
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: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.Here's the text:
And here's a substitution to remove those tags. But what's wrong with it?I'm talking about the cartoon with Fred and Wilma!
The problem is that the star is greedy. What if the text had said this instead?s#(.*)#$1#g;
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:I thought you said Fred and Velma, not Wilma
And it does the right thing.s#(.*?)#$1#g;
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.
Refreshing... (Score:4, Insightful)
Re:Refreshing... (Score:2, Insightful)
Question (Score:4, Interesting)
Re:Question (Score:3, Funny)
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?
Re:Question (Score:2)
Re:Question (Score:4, Informative)
Re:Question (Score:2)
Maybe I'm just brain numb from tonight's DARPA Grand Challenge meeting Go IRV! [indyrobotics.com], but can you explain this?
The text has been updated to reflect Perl 5.8, although this book doesn't introduce any 5.8 specific concepts
This almost sounds like Twin Sons of Different Mothers
Perl6 is a mistake (Score:2, Informative)
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
Re:Perl6 is a mistake (Score:2)
Admittedly, perl 5 OO is rather hackish, but Perl 6 OO truly is different. Instead of taking some random object and blessing it to a package, Perl 6 makes classes first-class objects, and allows instances to be created, just as in most other OO programming languages. Yes, even ruby.
Mod parent up (Score:2)
I always felt that Perl 5 needed some drastic cleanup and simplification. I never got the hang of writing proper OO libraries, because it was so painful and non-obvious. While that's somewhat fixed in Perl 5, there's a whole new load of complexity being introduced.
I don't want variables to have different syntax depending on whether they're
Re:Perl6 is a mistake (Score:2)
Could substitute -freenode #perl for this (Score:2)
Fortunately, perl is headed into a blessed obsolescense... here's [taupehat.com] a hint as to why. Cheers!
Re:Could substitute -freenode #perl for this (Score:3, Insightful)
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.
Re:Could substitute -freenode #perl for this (Score:3, Insightful)
Re:Could substitute -freenode #perl for this (Score:2)
Dang, you just made me spray my drink all over my desk!
Re:Could substitute -freenode #perl for this (Score:2)
Elegance?? Are we talking about the same language? I can't wait to see Perl6.0, just to see Larry take another stab at OO Perl.
Re:Could substitute -freenode #perl for this (Score:2)
Elegance?? Are we talking about the same language?
You know the difference between a dance performed by a brilliant dancer and the same one performed by a no-talent hack? Elegant code is just like that dance.
Re:Could substitute -freenode #perl for this (Score:2)
Is the Python headed to the Perl funeral home to pay his respects to his dead buddy fortran?
Python, not anymore. Ruby, maybe but doubt it (Score:2, Insightful)
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
Re:Python, not anymore. Ruby, maybe but doubt it (Score:2)
I smell a spelling troll. Makes the rest a bit suspect.
If you are serious, then well, sorry you couldn't hack it. Java I'd accept as an example of enforced OO run amok, but if you can't even handle python, then I suggest getting a nice non-technical job that won't stress you out too much. I don't even like python all that much, but I would hardly call it any more challenging than, say, Visual Basic.
Re:Python, not anymore. Ruby, maybe but doubt it (Score:2)
Re:Python, not anymore. Ruby, maybe but doubt it (Score:4, Insightful)
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.
Re:Could substitute -freenode #perl for this (Score:2)
Doing PHP (Score:2)
That's what I've always liked about Perl, it fills the void. Before PHP it was the CGI king, now PHP and ASP share that. But it's still there when you need it.
I've been meaning to check out mod_perl2 which I've heard is finally stable. Anyone try it out yet? Comp
What's wrong with the example? (Score:3, Interesting)
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?
Re:What's wrong with the example? (Score:3, Funny)
Hmm, perhaps s#(.*)##g; ?
Re:What's wrong with the example? (Score:2)
TMTOWTDI, Indeed!
Re:What's wrong with the example? (Score:2)
Re:What's wrong with the example? (Score:2)
Re:What's wrong with the example? (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.
Out of the way Jesus (Score:3, Funny)
Re:Out of the way Jesus (Score:2)
Recommended books (Score:5, Funny)
The other two being this one [amazon.com], and this one [amazon.com].
Re:Recommended books (Score:2, Flamebait)
Re:Recommended books (Score:2)
Re:Recommended books (Score:2)
Nice review (Score:5, Funny)
But why the cartoon swearing??
Hated it (Score:4, Informative)
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.
Re:Hated it (Score:2, Informative)
Re:Hated it (Score:3, Informative)
Re:Hated it (Score:2)
I also still use it as a reference - finding stuff in there usually takes less time than Googling for it or looking at the manpages.
To each their own, of course, but I think it's not fair to characterise Programming Perl at least as a bad book.
Re:Hated it (Score:2)
Yeah, so do I. It's also the only language I use day to day :)
I find that Effective Perl Programming [amazon.com] is a nice "once you know the syntax" book. I don't actually remember what books I learned Perl from (I think I skimmed the Camel and then just read the perldocs), but reading this one in "retrospect" I found a lot to agree with.
Re:Hated it (Score:2)
Re:Hated it (Score:2)
Anyway, I feel kind of guilty for getting modded to 5 for ripping those books, but I thank all the responders for their tips on good perl books.
Re:Hated it (Score:2)
regex (Score:3, Informative)
$ 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
Re:regex (Score:3, Informative)
And of course, the Slashdot editors didn't catch that, but that's probably hardly surprising...
the review (Score:3, Insightful)
Re:the review (Score:3, Insightful)
Perhaps you'll like Perl Best Practices [oreilly.com] then.
Re:the review (Score:5, Insightful)
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.
Re:the review (Score:2)
One of the key issues repeatedly addressed in this book (and our courses [stonehenge.com]) is readable and maintainable Perl.
We often talk about "the maintenance programmer". As in, "you, three months/weeks/hours from now, when you can't remember what the hell you wrote", and how to write for "that" person.
Believe me, I have a vested interest in removing the "Perl is unreadable/unmaintable" meme. It shall die!
Re:the review (Score:2)
No one thing seems to have more affected how people think about Perl. {sigh}
Re:the review (Score:2)
Yeah, but it's not all that much fun posting this at the monastery:
Re:the review (Score:2)
Cynical O'Reilly marketing exercise (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.
Re:Cynical O'Reilly marketing exercise (Score:4, Informative)
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 [stonehenge.com], 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.
PP 4th ed.? (Score:2)
Re:PP 4th ed.? (Score:3, Informative)
Re:PP 4th ed.? (Score:2)
Re:PP 4th ed.? (Score:2)
Re:PP 4th ed.? (Score:2)
The regex example as it should have displayed: (Score:5, Informative)
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.
Re:The regex example as it should have displayed: (Score:3, Funny)
Re:The regex example as it should have displayed: (Score:2)
Re:The regex example as it should have displayed: (Score:2)
I learned something useful on Slashdot today!
(snoopy dance)
Sorry, couldn't resist... thanks for the great post.
Little Point Learning Perl If Not Already Learned (Score:2, Interesting)
Re:Little Point Learning Perl If Not Already Learn (Score:2)
So, learning Perl today may actually increase your job potential. New startups are happening all the time, including projects that are shifting away from Java and dot-net, and toward real workable open-source solutions.
CPAN - take a look (Score:3, Insightful)
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.
Re:Little Point Learning Perl If Not Already Learn (Score:2)
Suppose I have several large datafiles, and I need a subset of the data from all of these in a different format. Perl is the best tool I've found for dealing with that. Variations on perl -ne 'print if
Re:Little Point Learning Perl If Not Already Learn (Score:2)
The win32 modules shit all over vbscript or command scripts for messing with AD :D
So there's a use for people who don't know it yet - i'm sure there's plenty more.
smash.
Re:Little Point Learning Perl If Not Already Learn (Score:2)
From a professional standpoint, there are plenty of open positions at the very large company I work for that call for Perl in new development projects. Methinks your bias is showing.
Here You Go (Score:2)
I'm not the original poster, but here you go:
Mike
Re:Here You Go (Score:2)
Look at tons of slashdotters here who have atrocious English - even if it's apparently their "mother tongue".
Despite all their elegance etc, LISP and its close relatives have not caught on.
Re:Here You Go (Score:2)
I waiting for perl.NET to be released! (Score:2, Funny)
Re:I waiting for perl.NET to be released! (Score:2, Informative)
I keep a copy of Perl 5 for Dummies on my desk... (Score:2, Funny)
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.
Beginning Perl by Simon Cozens (Score:2)
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).
Learning Perl is NOT a tome! (Score:2)
Re:Learning Perl is NOT a tome! (Score:2)
Re:Pattern (Score:4, Informative)
\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.
Re:Pattern (Score:2)
You are kidding, or insane, or think that "straight forward" means hard to understand.
Re:Pattern (Score:2)
Re:Python's better (Score:2, Funny)
Re:International Order of the Llama (Score:2)
What's scary is that after a full night programming Perl/Tk, I usually end up doing this exact thing of my own volition, even though I've never heard about "the Sign" before the parent post.
Excuse me while I go chase NumEntry() out of my brain with an ice pick...
Soko
Re:I wouldn't buy anything from this author (Score:5, Interesting)
I encourage you to review every article I've written there [perlmonks.org], and come to your own conclusion. I'll stand by my public record.
Re:I wouldn't buy anything from this author (Score:2)
Don't rise to the bait.
Re:I wouldn't buy anything from this author (Score:5, Informative)
Re:I wouldn't buy anything from this author (Score:2)
Re:Top three recommended books for Perl newbies (Score:2)
Re:Top three recommended books for Perl newbies (Score:2)
Mind you maybe I like Perl (though I don't get to use it as much I'd like) because I have the sort of mind to enjoy the Friedl...
Re:Top three recommended books for Perl newbies (Score:2)
Re:Ruby (Score:2)
Re:Perl Runs Slashdot? (Score:4, Insightful)
With respect to Rasmus [wikipedia.org], whom I've met on more than one occasion, I've often said:
I'll leave it to you to discover why I say that.Re:Perl Runs Slashdot? (Score:2)
Re:Perl Runs Slashdot? (Score:2, Insightful)
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 [securityfocus.com]
Re:Perl Runs Slashdot? (Score:4, Insightful)
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.
Re:Perl Runs Slashdot? (Score:3, Interesting)
Disclaimer: I
Re:Perl Runs Slashdot? (Score:2)
It's not as fast as mod_perl, since your program is now a separate process from apache and they talk via sockets or something, but if you're going to use perl or some other interpreted/bytecode language, the magnitudes of the speed difference aren't likely to be your main problem (the algorithms, architecture and hardware probably affect the spe
Re:why learn perl NOW? (Score:2)