Slashdot Log In
Minimal Perl for Unix and Linux People
Posted by
samzenpus
on Wed Feb 21, 2007 03:37 PM
from the easy-does-it dept.
from the easy-does-it dept.
Ravi writes "Perl (Practical Extraction and Report Language) — the language which was created by Larry Wall is arguably one of the greatest programming languages. But it has a reputation for taking an excessive cryptic nature which gives it an image especially among Perl novices as a language which is complex and hard to master. Minimal Perl: for Unix and Linux people, authored by Tim Maher and published by Manning Publications addresses the obstacles presented by Perl's complexity. This book which is divided into two parts comprising of a total of 12 chapters takes a unique methodology to explain the Perl syntax and its use. The author emphasizes on Perl's grep, awk and sed like features and relys on concepts such as inputs, filters and arguments to allow Unix users to directly apply their existing knowledge to the task of learning Perl." Read on for the rest of Ravi's review.
| Minimal Perl for Unix and Linux People | |
| author | Tim Maher |
| pages | 464 |
| publisher | Manning Publications |
| rating | 8 |
| reviewer | Ravi |
| ISBN | 1932394508 |
| summary | Provides a slice of Perl which when mastered can accomplish most of the jobs which require Perl |
What I found while reading this book is that the "Minimal Perl" is a specially crafted subset of Perl language designed to be easily grasped by people who have a Unix background and who wish to use Perl to write their scripts. Its aim is to filter out the complex way of writing programs using Perl and whenever possible to accomplish tasks using just one or two lines of Perl. In the first part of the book, the author explains how Perl can be used to do the same tasks as accomplished by common Unix tools such as grep, awk, sed and find. He goes one step further by explaining how one can accomplish much more and in a much simpler way by using Perl techniques.
Throughout the book, the author makes sure that the learning curve in acquiring Perl skills remain gentle. Perl is a language whose syntax has a multitude of options, this book is peppered with numerous tables which provide excellent information at a glance. For example, in the third chapter titled "Perl as a (Better) grep command", the author lists and compares the fundamental capabilities of Perl and the different grep commands such as grep, egrep and fgrep which clearly shows the advantages that Perl has over grep. In another table, you get a birds eye view of the essential syntax of Perl's regular expressions and their meaning. This chapter alone has around 12 tables. This is a really nice feature because it doubles as a Perl reference where you can flip to the respective page and get the information you need.
The main strength and drawback of a language such as Perl is its dependence on regular expressions for accomplishing complex tasks. Once you master the regular expressions, the sky is the limit for ordering and segregating data using this language. In Perl, there is more than one way of doing the same thing. What is unique about this book is that the author specializes in explaining the easiest way of doing a particular task.
In many places, the author demonstrates complex tasks using just a few lines of Perl code. Many of the examples covered in this book are practical examples which give an idea of how the commands relate to the final outcome. For instance, while elaborating on the one line grep like commands in Perl, the author illustrates a web oriented application of pattern matching where he shows how to extract and list, the outline of slashdot.org site's front page. The surprising thing is this is accomplished using just a single line of Perl code. This book has lots of such one line examples which teache how to use Perl intelligently using minimal effort.
If part I of this book focuses on ways in which simple Perl programs can provide superior alternatives to standard Unix commands, the second part throws light on the other aspects of Perl concentrating on the syntax of the language and various built-in functions and modules available which do away with a lot of re-invention of the wheel, so to speak, and helps churn out code which is portable.
Chapter 7 titled "Built-in functions" introduces an eclectic mix of functions available in Perl. You have functions which are used to extract a list of fields from a string, functions to access the current date and time, generating random numbers, sorting lists, transforming lists, managing files with functions and so on. These functions are broadly classified into those which generate and process scalars and those that process lists.
In chapter 8 of this book, the author involves the reader on the numerous scripting techniques that can be used to write better Perl programs.
It was quite surprising that the author has chosen to discuss the variables, more specifically the list variables comprising of arrays and hashes, as well as the looping constructs only in the 9th and 10th chapters, when they should be somewhere up front. In hind sight, I feel it is a good decision. Once you execute the one liner Perl programs in the initial chapters, you will be fairly confident in using Perl by the time you reach the 9th chapter.
The last two chapters deal with creating sub-routines and modules. Over the years various Perl programmers have created modules which are used for diverse purposes. With an aim to share these modules, they are collected and stored at one central place known as CPAN, which is an acronym for Comprehensive Perl Archive Network. The final chapter, apart from teaching how to create modules in Perl and manage them, also introduces the CPAN and ways in which one can find the right module by searching on CPAN.
The special variables cheat-sheet and the guidelines for parenthesizing code provided in the two appendices are really useful as a quick reference while writing Perl programs.
This is not a comprehensive book on Perl, rather the author provides a slice of Perl which when mastered can accomplish most of the jobs which require Perl. You won't find object oriented concepts of Perl being mentioned in this book. In many ways the author has moved beyond explaining a subset of Perl by providing a section titled "Directions for further study" at the end of each chapter, where the author lists further material which can be used to learn more about the topic that is covered.
I really enjoyed going through this book, especially because of its focus on the practical side of using Perl and taking a minimal approach.
Ravi Kumar maintains a blog titled "All about Linux" where he shares his thoughts and experiences in using Linux, Open Source and Free software.
You can purchase Minimal Perl for Unix and Linux People from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
Throughout the book, the author makes sure that the learning curve in acquiring Perl skills remain gentle. Perl is a language whose syntax has a multitude of options, this book is peppered with numerous tables which provide excellent information at a glance. For example, in the third chapter titled "Perl as a (Better) grep command", the author lists and compares the fundamental capabilities of Perl and the different grep commands such as grep, egrep and fgrep which clearly shows the advantages that Perl has over grep. In another table, you get a birds eye view of the essential syntax of Perl's regular expressions and their meaning. This chapter alone has around 12 tables. This is a really nice feature because it doubles as a Perl reference where you can flip to the respective page and get the information you need.
The main strength and drawback of a language such as Perl is its dependence on regular expressions for accomplishing complex tasks. Once you master the regular expressions, the sky is the limit for ordering and segregating data using this language. In Perl, there is more than one way of doing the same thing. What is unique about this book is that the author specializes in explaining the easiest way of doing a particular task.
In many places, the author demonstrates complex tasks using just a few lines of Perl code. Many of the examples covered in this book are practical examples which give an idea of how the commands relate to the final outcome. For instance, while elaborating on the one line grep like commands in Perl, the author illustrates a web oriented application of pattern matching where he shows how to extract and list, the outline of slashdot.org site's front page. The surprising thing is this is accomplished using just a single line of Perl code. This book has lots of such one line examples which teache how to use Perl intelligently using minimal effort.
If part I of this book focuses on ways in which simple Perl programs can provide superior alternatives to standard Unix commands, the second part throws light on the other aspects of Perl concentrating on the syntax of the language and various built-in functions and modules available which do away with a lot of re-invention of the wheel, so to speak, and helps churn out code which is portable.
Chapter 7 titled "Built-in functions" introduces an eclectic mix of functions available in Perl. You have functions which are used to extract a list of fields from a string, functions to access the current date and time, generating random numbers, sorting lists, transforming lists, managing files with functions and so on. These functions are broadly classified into those which generate and process scalars and those that process lists.
In chapter 8 of this book, the author involves the reader on the numerous scripting techniques that can be used to write better Perl programs.
It was quite surprising that the author has chosen to discuss the variables, more specifically the list variables comprising of arrays and hashes, as well as the looping constructs only in the 9th and 10th chapters, when they should be somewhere up front. In hind sight, I feel it is a good decision. Once you execute the one liner Perl programs in the initial chapters, you will be fairly confident in using Perl by the time you reach the 9th chapter.
The last two chapters deal with creating sub-routines and modules. Over the years various Perl programmers have created modules which are used for diverse purposes. With an aim to share these modules, they are collected and stored at one central place known as CPAN, which is an acronym for Comprehensive Perl Archive Network. The final chapter, apart from teaching how to create modules in Perl and manage them, also introduces the CPAN and ways in which one can find the right module by searching on CPAN.
The special variables cheat-sheet and the guidelines for parenthesizing code provided in the two appendices are really useful as a quick reference while writing Perl programs.
This is not a comprehensive book on Perl, rather the author provides a slice of Perl which when mastered can accomplish most of the jobs which require Perl. You won't find object oriented concepts of Perl being mentioned in this book. In many ways the author has moved beyond explaining a subset of Perl by providing a section titled "Directions for further study" at the end of each chapter, where the author lists further material which can be used to learn more about the topic that is covered.
I really enjoyed going through this book, especially because of its focus on the practical side of using Perl and taking a minimal approach.
Ravi Kumar maintains a blog titled "All about Linux" where he shares his thoughts and experiences in using Linux, Open Source and Free software.
You can purchase Minimal Perl for Unix and Linux People from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
This discussion has been archived.
No new comments can be posted.
Minimal Perl for Unix and Linux People
|
Log In/Create an Account
| Top
| 332 comments
| Search Discussion
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
Minimal Perl for Unix and Linux People (Score:3, Funny)
Re:Very Minimal Perl for Unix People (Score:5, Informative)
(http://www.astradyne.co.uk/tet | Last Journal: Friday November 09, @08:34PM)
No, it's horrendously slow. The traditional Unix way of doing it (tr -d '\015') is around twice as fast on files that are sufficiently large that startup costs are lost in the noise, and even faster on smaller files.
*sigh* (Score:5, Funny)
Re:*sigh* (Score:4, Insightful)
Re:*sigh* (Score:4, Interesting)
I've got a question about subtypes of acronym (Score:4, Funny)
(Last Journal: Tuesday August 07, @01:18PM)
Would Muhammad Ali's GOAT (Greatest Of All Time) line of food products [bakeryandsnacks.com] be considered a snackronym or a blackronym?
Re:*sigh* (Score:5, Funny)
(http://www.imagicity.com/)
ITYM 'Poorly Hung Perl'. 8^)
So you like the book (Score:1)
Re:So you like the book (Score:5, Funny)
IGN scoring works like this:
5/10 - The game runs
6/10 - The game is an FPS
7/10 - The game has team-based mulitplayer online play
8/10 - The game runs at 190 frames-per-second
9/10 - The game is made by a publisher that buys advertising on IGN
10/10 - The game is made by a publisher that buys A LOT of advertising on IGN
Cryptic? Complex!? (Score:5, Funny)
(http://www.badgerville.org/)
So wrong! Just look at the following example:
#!/usr/bin/perl -w
length q caller vec and print chr oct ord q qx eq and print chr ord q ref or and print chr ord q or no and print chr ord q else and print chr ord qq q q and print chr ord q tie gt and print chr ord qw q sin q and print chr ord q q eq and print chr ord qw q sin q and print chr ord q sin s and print chr ord q cmp lc and print chr ord q split s and print chr ord qw q lc q and print chr ord q ne sin and print chr hex length q q bless localtime ref q
Run that. Nothing cryptic or complex at all.
(BTW, it prints "Perl is simple!")
Re:Cryptic? Complex!? (Score:5, Interesting)
(http://www.toleressea.net/)
I used Perl for fun and profit (wrote many Perl scripts for a speech software company) for many years, hanging on past the point where others started using Python, PHP, and Ruby instead. I knew Perl and could practically think in it. But one of the main problems with Perl is it's so easy to right totally unmaintainable, totally unreadable code. I read a Perl program I wrote a few years ago and I can never figure it out. The object-oriented part of Perl is a ridiculous kludge with so many little details that I can't remember them all. There are about 100 subtly different ways to write a constructor for your object:
sub new() {
my ($class) = @_;
my $self = {}
return bless $self, $class
}
sub new() { return bless {} }
sub new() {
my ($class) = @_
my $self = {}
bless $self, (ref $class || $class)
}
All of these, of course, have subtly different behaviors. The second will break inheritance. The third will allow you to use the constructor as an instance method, not just a class method. There are no enforced function prototypes or standard way to get parameters... and if you do use the *optional* prototype mechanism, you will subtly change the precedence of calls to your function.
I thought that having 1000 ways to do something was great, but it turns out to be a nightmare for non-trivial programs. Every time I try to use a cute fancy shortcut in Perl, it bites me in the ass. As a result of the over-flexibility, people have tried to impose "standards" on Perl. There are "standard" techniques for named parameters, "standard" techniques for accessor functions, etc. And that's nice, but Perl has 10,000+ available modules to do everything from screen-scrape Google news to access Oracle databases (it's greatest strength!!!). And not all those modules use the standard techniques.
About a year ago I decided to give Python a try. And I haven't looked back. It can do everything Perl can do, and then some. Everything is clearer and having a "standard" way to do most things makes learning new modules immensely easier. Having slightly more verbose syntax and strict type-checking is slightly annoying at first, but keeps me sane in the long run.
Basically I don't use perl for anything other than one-liner regexp tricks anymore. Stuff like perl -i -pe 's/FOO/BAR/g' *, which will change the string FOO to BAR in all the files in the current directory.
Re:Cryptic? Complex!? (Score:5, Insightful)
Re:Cryptic? Complex!? (Score:5, Informative)
(http://www.smileystation.com/)
Sed will do that too:
sed -i 's/FOO/BAR/g' *
The review says that the book uses the reader's knowledge of sed, awk, and grep. I figure: why not just use sed, awk, and grep...however, one advantage for Perl here is that (I presume) that line works with any Perl; '-i' is a GNU sed extension and may not work on non-GNU seds...
Strategies for complex perl code bases (Score:4, Insightful)
(http://obsidianrook.com/ | Last Journal: Tuesday October 16, @01:48AM)
That's a pretty common way of implementing objects in perl, but it is, of course, not the only way... The current thinking seems to be we should all switch to using "Inside-Out Objects" (briefly: object data is moved to class data, and the object only needs to be a unique id to pick out the correct values from the class data -- so you bless a scalar ref, and get a lightweight object which stringifies to a unique id). The point being that if you do things this way, you really *have* to use the accessors, you can't cheat and treat the object as a hash reference any more. Unfortunately, last I looked there was some argument about what precisely was the right way to do this (there's some issue with thread support), though the best publicized way of doing it certainly the one recommended by Damien Conway in his newish book "Perl Best Practices".
If you're not interested in re-writing your entire code-base to conform to someone's notion of "Best Practices", myself I might suggest looking into "lock_keys" in the Hash::Util module. You could adopt the practice of doing a lock_keys on the hashref at the end of the object/creation initialization stage, and then if anyone accidentally tries to create a new hash field later, it will throw an error. A simple, effective trick, and I wish it were better publicized...
On occasion I wonder how hard it would be to write an automated test that would look for cases where someone has done a "$obj->{hash_field}"...
In general, coding standards are important, and where the language is really flexible, they arguably become even more important -- but I think a lot of that problem can be solved with some good automated testing. For example, there's a CPAN module called Perl::Critic that will do things for you like check to make sure your code matches a given set of coding standards (it defaults to Conway's "Best Practices", as I remember it).
Re:Cryptic? Complex!? (Score:4, Insightful)
(http://www.game-point.net/ | Last Journal: Monday November 14 2005, @09:19AM)
Re:Cryptic? Complex!? (Score:4, Insightful)
(http://www.toleressea.net/)
You know, it seems like *everyone* is put off by this aspect of Python at first. The first time I looked at it, it drove me nuts, and then I ignored Python for another two years.
But once I actually tried to write a program in Python, I found I didn't mind it one bit. Within a few hours my eyes didn't get confused by the lack of braces. I think it's actually easier on the eyes once you get used to it.
So I can't say, "don't knock it", because I've done that myself for sure. But do give Python another look, maybe play around with the tutorial for an hour or two.
I {} Perl (Score:5, Interesting)
(http://www.vanitydomainsarelikeso20thcentury.org/)
That is all...
Re:I {} Perl (Score:5, Funny)
the book looks very relevant (Score:2, Interesting)
Should I read this or continue with sed/awk? (Score:3, Insightful)
(Last Journal: Saturday October 15 2005, @06:40PM)
I'm currently going through http://www.oreilly.com/catalog/sed2/ [oreilly.com], but I can see my using perl the more I do website programming. Would an experience scripter suggest that I switch to perl (for it seems it can perform similar text manipulation functions conveniently in a programming lanuage), or spend more time with sed/awk?
I'll probably do both incidentally, but opinions would be appreciated. It seems everyone rates perl.
I was going to switch to Python, but apparently Perl is better for smaller/one line regexp manipulation in scripts, and python for building large applications.
Re:Should I read this or continue with sed/awk? (Score:4, Informative)
(http://www.christopherculver.com/)
I don't want to put Perl down, but I think that its day is past except for those who, because they learnt it when it was the only thing around, are willing to tolerate its eccentricities. While switching from sed/awk to a general-purpose programming language with good text manipulation abilities can certain improve the possibilities of what you can accomplish with a single chuck of code and processor (as opposed to the old-time Unix way of piping), I'd recommend Python for that, getting started with a guide like Mertz's Text Processing in Python [amazon.com] (Addison-Wesley, 2003). Python is now as mature, if not more, in the realm of text processing as Perl was when its won its accolades a decade ago. (Heck, the treatment of Unicode is enormously forward-thinking compared to any other scripting language on the market.) And so you get the same power as you would with Perl, but much, much more readable.
I fear I'm starting a holy war by recommending Python in a Perl discussion. That's certainly not my intention. For those who already know and love Perl I say, great, keep on trucking. But I just can't see the point in steering newbies towards it.
Re:Should I read this or continue with sed/awk? (Score:4, Funny)
(http://obsidianrook.com/ | Last Journal: Tuesday October 16, @01:48AM)
Well, I didn't mean that to be taken personally... but consider the fact that ESR is on your side.
That's cheating (Score:2)
Perl Script for the Dummy Like Me (Score:1)
(Last Journal: Thursday June 07, @02:55PM)
Basic way to clean up your Perl code (Score:2, Funny)
(http://www.mindchild.net/ | Last Journal: Tuesday November 29 2005, @10:16AM)
Why not for Windows people? (Score:5, Interesting)
Just remembering by boss's jaw drop when he asked me if I could do a quick analysis of a couple thousand lines of logs and asked how long it would take. "10 minutes." And I delivered. He thought I'd have to fire up VS and write some C code.
He borrowed my Camel book during his next vacation.
Re:Why not for Windows people? (Score:4, Informative)
(http://phroggy.com/)
Cryptic? (Score:4, Insightful)
(http://www.anserinae.net/)
Is it just me, or is it possible to create perfectly legible code in Perl if you use good technique, just like in any other language?
The cryptic/convoluted stuff only comes out when you try to be too cute.
Re:Cryptic? (Score:4, Informative)
(http://www.hyperlogos.org/ | Last Journal: Wednesday July 18, @08:19PM)
Of course. The thing that people complain about is that perl allows you to write code that only a fellow perl-head can understand. It's harder to accomplish that with C, for example. But perl doesn't automatically mean you won't understand it. It just makes it more likely :)
Cryptic whitespace (Score:4, Insightful)
A language which makes a semantic distinction between tabs and spaces may give the appearance of enforcing legibility but in fact does little useful to help legibility.
A programming language should not make a distinction on meaning based on whether tabs or spaces are used; all whitespace should be regarded equaly (except, understandably, end of line characters).
Otherwise, python seems ok. I just wish it had a whitespace-agnostic mode.
*I* cannot visualy tell the difference between tabs and spaces, why should the programming language?
Re:Cryptic? (Score:4, Funny)
(http://stefanco.com/ | Last Journal: Sunday October 14, @11:09AM)
Cryptic 32-character hexadecimal MD5 hashes are a myth. It's only cryptic if you don't understand it.
Not hard to learn, very easy to remember (Score:5, Insightful)
(http://freefall.homeip.net/)
The thing I've noticed, as a Perl programmer, is that it is the *only* language I've ever used (amongst bash, c, c++, java, rexx, fortran, basic) that I can take a break from for a year, come back, and be able to write a simple script without the need to refer to any books or online manuals. That is VERY useful for those of us who are more sysadmins than programmers. This power is partly due to the "more than one way to do it" philosophy, that lets you program in a style that works for you, hence allowing you to remember *how* to write in that language.
Then again, that's what most anti-Perl folks bitch about. Any language can be obfuscated. If you write hard to decipher code in Perl, you'll write it that way in any language.
Not always cryptic (Score:1)
(http://www.galvao.eti.br/ | Last Journal: Monday March 19 2007, @06:06AM)
Writing a Perl script is fairly easy. Modifying another programmer's Perl script can be tough.
Rexx (Score:2)
Of course, Rexx is not an *it* language, but even Perl seems to be waning in favour of Python and Ruby, so I'll take the risk in bringing it up even if it isn't something we're 'supposed to be' excited about. As if a robust and mature scripting language were a bad thing...
Picking Up Perl (Score:5, Informative)
http://downloads.activestate.com/ActivePerl/Windo
http://www.crimsoneditor.com/ [crimsoneditor.com]
After you install perl open a command prompt and run ppm, this is your simple GUI gateway to CPAN packages (make a mental note). After you get a handle on basic perl checkout Perl/Tk (GUI Toolkit for Perl). The Tk packages are included and installed with ActivePerl... Here's your first Perl/TK program:
use Tk;
my $top = new MainWindow;
$top->configure(-title=>"My First Perl GUI Program");
my $lab = $top->Label(-textvariable=>\$labelText);
my $b = $top->Button(-text=>'Click Me!', -command=>sub {$labelText="Congratulations! it worked!" });
$lab->grid(-row=>0, -column=>0);
$b->grid(-row=>1, -column=>0);
MainLoop;
Perl grepping is *slow* (Score:2)
(http://www.smileystation.com/)
I wonder if the author listed a significant disadvantage of Perl: it is very slow [swtch.com] compared to awk and grep. For example: "Notice that Perl requires over sixty seconds to match a 29-character string. The other approach, [used by grep and awk], requires twenty microseconds to match the string. That's not a typo."
There's nothing like specialized Unix utilities, refined over thirty years with some GNU innovation thrown in, to deliver lightning fast speed.
perl5 has run it's course (Score:4, Insightful)
I've been programming perl for 10 years. I've written enough XS modules to be sadly familiar with perlguts and perlapi. I've used perl for a huge array of applications, not excluding some pretty twisted apache hacks using mod_perl. I write perl code every day in my job.
Lately however, I've grown more and more frustrated with this language. Here's some reasons why:
minnie pearl (Score:2)
http://en.wikipedia.org/wiki/Minnie_Pearl [wikipedia.org]
Arguably... (Score:1, Flamebait)
Hmm, kinda like George W. Bush is arguably one of the greatest presidents.
Sorry, couldn't resist.
Excesive verbiage (Score:1)
(http://gardnerman.com/)
I really want to know... (Score:1)
Not one of the greatest (Score:2)
(http://www.thekindbud.com/)
That's because it's just complex and hard to master, and not really all that great.
Another name for Minimal Perl... (Score:2)
(Last Journal: Monday August 20 2001, @01:45PM)
See MinimalPerl.com for more on this book (Score:1)
(http://minimalperl.com/)
Not by novice (Score:2)
Mmm, the bad Perl reputation is not especially among novices: at my beginning in Perl, I thought that it was a better, more powerful shell, and then I discovered Perl's maintenance hell and the more I used Perl, the more I disliked it.
Thank God for Ruby, it's funny it occupies exactly the same niche than Perl, but it's so different.. Ruby's creator has a 'really good aesthetic sense' and now that (at last) RoR is helping the Ruby language to spread, it has a chance to be used more often.
Re:Cheaper at Amazon. (Score:1, Troll)
Re:PERL backronym (Score:5, Funny)
(http://stylus-toolbox.sf.net/ | Last Journal: Tuesday May 15, @11:50AM)
Stands for Python'll Eventually Replace this Language.
or, optionally:
Perl Eats Ruby for Lunch
Re:Python (Score:1, Funny)
Re:Perl smells funny (Score:2)
(http://bfelger.net/)
And I'll do it without line numbers! Fear me!
Re:Arguably one of the greatest? (Score:2)
(http://wakaba.c3.cx/)
Re:oh come on, you're not even trying now (Score:2)
(http://freefall.homeip.net/)
Perl is the only language I have used that I can walk away from for a year, and then use it again WITHOUT having to touch a book or online manual.
What, exactly, does Perl's use of non-text characters have to do with consistency? BTW, ever try to write C code without (){}+=-*? Thought so.
Re:oh come on, you're not even trying now (Score:2)
Re:Perl smells funny (Score:1)
I used to write web apps of moderate size in Perl. I don't any more, but I still use Perl almost every day as a part of my system administration duties. It's a great tool for little scripts that get data from a text file or a database, do something with it, and spit it back into a text file or database. As a language for extracting data and generating reports, it's quite practical.
Re:oh come on, you're not even trying now (Score:5, Interesting)
(http://rustyp.freeshell.org/ | Last Journal: Tuesday April 29 2003, @09:22AM)
KISS is hard. Very hard. It's different in different places. Sometimes keeping it simple means writing less code. Sometimes it means creating a new sub-language that better describes your problem.
In perl, you can change the nature of the language itself. *Everything* can be changed. The idea is that if there is more than one way to do it, then you can do it the simplest way for whatever definition of simple is required.
Maintaining consistency is up to the developer himself. Obviously, those tempted to succumb to the lure of sloppiness (which, unfortunately, in my experience, is every perl programmer I've ever met including myself) shouldn't use perl for really big projects.
You can't blame the language for giving you that freedom, though.
Perl is where it is because you don't have to change the way that you think in order to program in it. Perl will change how it works to match how you think, which makes it more convenient than almost any other language.
That particular behavior is what makes it possible to have so many perl modules in existane, which in turn is responsible for the popularity. It's also why about half of those modules have bugs so horrible that they're unusable. It's certainly a tradeoff.
Re:oh come on, you're not even trying now (Score:2)
Therefore, one can reasonably conclude that in many environments, Perl is an ideal tool for the problem at hand. It can be used in ways that are not horribly short sighted, but it's flexible enough to still be useful in the situations that are.
Then again, my view of the world may be skewed by having spent too much time working for people who believe that russian roulette is the only viable way to make decisions. It's always worked in the past and the brain dead cannot be harmed by the game, so we don't do backups of our production databases. Our disaster recovery plan is to drive across town and get a job at a company that didn't have a disaster. I'm not kidding, we have senior VP level support (working in a bank) for this plan.
Re:oh come on, you're not even trying now (Score:1)
Amen! It's amazing to me the number of people who don't understand this. TIMTOWTDI is the worst aspect of Perl. Well, maybe not the very worst. I'd give that to the OO extensions (and I'm a long-time C++ fan).
TIMTOWTDI pretty much guarantees that no one else will be able to understand your code. It's great for being "clever" and for stroking your ego by impressing your friends with your one-liners, but that won't fly in software that has to be maintained.
Perl is fantastic for what it was originally intended to do: process text. Perl's use of regular expressions is right on. Perl was never meant to be used as a database, for large applications or anything beyond quick & dirty tools.
I use Perl a lot to process reports and create tables for spreadsheets and graphing programs. It works great for that kind of thing. But I would never use it in a large and complex project.
Re:oh come on, you're not even trying now (Score:2)
(http://127.31.33.7/)