4 ms·
I wonder how many others caught Wall quoting Lewis Carrol.... I suppose Carrol and Tolstoy are to be quoted when asking a natural language guy about computer l
by einhverfr 15y ago
I wonder how many others caught Wall quoting Lewis Carrol....
I suppose Carrol and Tolstoy are to be quoted when asking a natural language guy about computer languages.... ;-)
Honestly, for the last 6 years I have been doing mostly Perl programming (and managing an open source project largely written in Perl) and if I can't easily read a contribution easily I push back.... Perl doesn't have to be hard to read. I would say, however, that keeping things minimalistic is a real virtue in the language.
- kamaal 15y agoWell why does Perl win: Ready for this? The way I see, Any other way of doing regular expressions sucks more badly. In fact if you are look to replace your regular expressions with something else you are likely to inherit a thick verbose pile of junk. Now why do regular expressions work. Look at this thing below: $line =~ m/<some regex>/; This can also be written as, $line =~ m'<some regex>'; or $line =~ /<some regex>/; This matches the line with <some regex>, Why is this special? Because it just allowed to you match a line without first compiling the regex, and then matching it. Not just that it saved you from writing several tens of lines of code before using a regex which you generally have to do in other languages. So you can do something like: if ($line =~ /regex/) { } or do_something() if $line =~ /regex/; This is a bit of natural language way.. In case of file operations: while(<FILE>) { chomp; #Do your stuff } There are some amazing things that Perl does like my @file_content = `cat somefile`; Suddenly all contents are in an array in your program. Worried about removing new lines from that array? Just do chomp(@file_content) Want to go over that file now? Just do foreach my $line(@file_content) { #Do your stuff here } Want to deal with that line? You have, my @fields = split( /<some regex>/, $line ); Want to do more matching/extracting from lines? my @processing = map { do_something($_) } @fields; Want to find something in that array? my @results = grep { /some regex/ } @fields; Want to handle exceptions? eval { #Some operation } if $@ { #Handle exception } open( FILEHANDLE , '<' , $file ) or die "Cannot open file"; Just felt the need to create a small database? use strict; use warnings; use DB_File; use Fcntl; my %some_hash tie (%some_hash, "DB_File", $dbm_file, O_RDONLY or die "Unable to open dbm file $dbm_file: $!"; #change your hash untie(%some_hash); You just got a key-value database. Want to execute a shell command? `/some/command/execute`; or system('/some/commmand/execute'); Need to create a function? sub function_name { my ($var1,$var2..) = @_; } Need to create a Class or a Package? package Name; #do stuff here 1; You can also create anonymous functions my $function = sub {}; $function->(); This also means you can create a closure: sub function1 { my $function = sub {#does something}; return \$function; } In latest versions of Perl, there are some cool features like: given($some_data_structure) #what ever that is array, reference etc { when ( #some match operation ) { #do something } ... ... } this serves both as a smart matching loop/switch statment. All the above gives you quick scripting tools. You also have your usual set of ternary operator,if..else, you can also quote regular expressions. Now why did I write this, I wrote this to tell that. Perl's motto is to get stuff done. In a no BS way. It adapts to your style, its Object oriented, its functional etc. You decide the style the language bends to you. You get Best of the OO features from Moose(http://search.cpan.org/~doy/Moose-2.0402/lib/Moose.pm http://search.cpan.org/~doy/Moose-2.0402/lib/Moose.pm), You get modules like Devel::Declare and DBIx::Class, You also get a framework like catalyst. At the same time you can write in funtional programming techniques. You can do cool stuff like Memoization and higher order parsing. For more information read Mark Jason Dominus's Higher order Perl - (free ebook) http://hop.perl.plover.com/ http://hop.perl.plover.com/ At the same time you as a novice can begin with programming with what you understand Read Chromatic's Modern Perl Book - (free ebook) - http://onyxneon.com/books/modern_perl/ http://onyxneon.com/books/modern_perl/ You can do Object oriented programming, Functional programming, Declarative programming all without shoe horning things using frameworks. You can build big to medium sized apps. Its difficult to demonstrate all that in a post, Hence read MJD's book. But at the very same time you can use it as a scripting language in which you can cook scripts are at a very quick pace, You can quickly prototype, solve data/text processing problems. You can make it behave like awk, sed and what not. You can create quick databases. No wonder its still among the top programming languages in the world even after 25 years since its release. Last but not the least, Its killer app : http://www.cpan.org/ http://www.cpan.org/
- rjh29 15y agoConsider http://www.metacpan.org/ http://www.metacpan.org/
- bane 15y agoI've yet to encounter a language that flows as nicely as Perl does, from thought to code. I haven't been a serious programmer for many years, and I can still sit down, after months or years of not writing any code, and hack out some Perl code almost as fast as I can type. One of these days when I have some time I'll need to get my Perl skills up to 2012 levels as the language has moved on so much from where I was when I sat down with "Perl for Dummies" in 2000 and became proficient enough in the language in a week to build some fairly major linguistics tools for the company I was working at at the time. (As a set of total side projects to my normal C++ production life). Once you realize that the control structures flow like an English sentence, once you grok that, the language simply gets out of the way. It's not bound to an ivory tower of a certain paradigm. It's a human language. Sure you can write Perl that's almost unreadable, but you can do that in many programming languages, and you can do it in real human languages. Written well, reading Perl is like reading beautiful poetry. Case in point, I once wrote a program in Perl, about 30,000 lines of code (which by Perl standards is relatively large, a Java port ended up about six times as large), then didn't see it for 2 years. I was asked to guide a team to port the code to Java, I sat down one afternoon, and just read the code like a book. After that I almost never had to refer to the code again, and guided the team through the rest of the porting process. I knew it like I had just read a novel. Cause and effect was obvious, the bundling of the chapters (modules) made dramatic sense, and when I had to refer to the code to show it to one of the Java devs, it took seconds to find the code segment in notepad of all things. Very little boilerplate, the best integration of regexes in the industry, yet still powerful enough to write major sites and applications in. Downside: it ruined me as a developer, all the BS you have to go through in other languages to just get something done seems like such busy work. I ended up writing a set of libraries in C++ to handle lots of things in a perlish sort of way, typeless primitives, perl style containers, etc. But at the time C++ didn't have the same kinds of sentence-like control structures and simple regex matches always became a dozen lines of compiling regexes and then matching, and then iterating some data structure to get at the results. Painful. Java became intolerable. I remember the last time I sat down to write something in Java, spending hours hunting through the standard library documentation thinking "this is bullshit, I shouldn't have to create xyz minor feature from whole cloth, it's got to be in the standard library, for fuck's sake Java has 3 gui frameworks and I have to parse a csv file by hand!!!"