5 ms·
Perl is a write only language for me. I've got 20 year old python scripts the have been upgraded over the years that are still maintainable, easy to read and d
by dazzawazza 6y ago
Perl is a write only language for me.
I've got 20 year old python scripts the have been upgraded over the years that are still maintainable, easy to read and do the job just fine.
- b2gills 6y agoPerl is a write once language for me. In that I write it once and 20 years later it still works even though I upgraded the compiler many times.
- dcassett 6y agoWhen I read the perldocs much of it looks write-only. But in keeping with Perl's spirit of "there's more than one way to do it", one can actually write straightforward Perl code that is as understandable as Python.
- tyingq 6y agoI'm a Perl fan, but there are some places where it's hard to avoid ugly code. Like collections of complex data structures, especially combined with references. No matter how hard you try, you get messy looking code.
- tzs 6y agoI can write code that is easy to maintain even after not seeing it for decades, and I can write code that I have trouble maintaining after a long weekend away from it, and I can do this in nearly any language I know. Take good old fizzbuzz. Want to write it clear and simple in Perl? No problem: for (my $n = 1; $n <= 100; ++$n) { if ($n % 15 == 0) { print "fizzbuzz\n"; } elsif ($n % 3 == 0) { print "fizz\n"; } elsif ($n % 5 == 0) { print "buzz\n"; } else { print "$n\n" }; } Want to get clever and complex in Python? Here you go: def fizzbuzz(n, *args): cur = ['' for x in range(1,n+1)] for m, postfix in args: cur = [y+postfix if x%m==0 else y for x, y in zip(range(1,n+1), cur)] cur = [str(x) if y == '' else y for x, y in zip(range(1,n+1), cur)] return cur print("\n".join(fizzbuzz(100, (3, 'fizz'), (5, 'buzz')))) Of course you could do an unclear and overly clever Perl version, too, or a clear and simple Python version.
- ulisesrmzroche 6y agoThe point is that python leads you to clear and simple. No one would write the monstrosity you did, not even by accident, while in Perl, even that little fizzbuzz looks noisy cus of the explicit new lines
- DFHippie 6y agoI haven't used Perl recently, but the last time I did there was a say function, so say "foo"; was equivalent to print "foo", "\n";
- ulisesrmzroche 6y agoMy point exactly. Python begginners would have trouble recognizing the second option, which is good, because that’s the bad option: “Omit needless words” Perl obviously even lets experts shoot themselves in the foot on the simplest code, see the fizzbuzz above me, While a beginner would never write the complex python version that was shown, not even by accident.
- kbenson 6y agoOptimizing for beginners is fine, but let's not act like it's "correct". It's a Python design choice, some people like it, but there are consequences to it. Like almost all language design choices, it's a trade off. Usually the trade-off for simple to learn is that it's restrictive to professionals and experts. For new users, teaching classes, and bringing amateurs onto an existing team, it works well. For a team where everyone has 5+ years of experience in Python, I imagine there will be some annoyances where they fell boxes in by the language. That's the trade off in action. An example of a langauge at the extreme other end of the spectrum would probably be APL. It's indecipherable gibberish to me every time I look at it, but I'm not even an APL amateur, much less professional, and that language seems built to be used by people that are very familiar with it. Is that wrong? No, they just aren't optimizing for learnability and community growth, as Python does, instead opting to make it as simple and useful as possible for experts to get what they need accomplished. You can counter by saying that most code is read more than it's written, so readability is more important, and to that I would say that it depends on the type of code (scripting languages lend themselves to a lot of one-off scripts), and that readability is also a function of experience. If you want your code easily readable my amateurs, then keeping the capabilities you can use to those an amateur can understand is beneficial. If you want your code readable and understandable by experienced programmers, use constructs and control flows that they are experienced with, which is a much wider set of capabilities usually (if the language supports them).