4 ms·
That's how I use Python for the last few years. My scripts end up longer and more verbose typically (I might just not be great at Python) but also a lot more m
by inglor 6y ago
That's how I use Python for the last few years.
My scripts end up longer and more verbose typically (I might just not be great at Python) but also a lot more maintainable (I am not great at writing maintainable Perl and I use Python more often).
I also use Node.js for this a lot because of the ecosystem containing so many accessible scripts and dependency management while not great is heaps better than most other ecosystems.
Of course OpenBSD can't do that with Python rather then Perl (as explained in that email). They have a different set of constraints. I am only saying in practice I have found Python to be the better alternative for my personal stuff.
- dazzawazza 6y agoPerl 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 ago
- andrewl-hn 6y agoI've tried to use Python for this kind of scripting, too, but went back to Perl. Python-the-interpreter is annoying. Is it /usr/bin/python or /usr/bin/python2 or maybe even 3? Does this server image / distro even come with Python? Sure, Python-the-language is nice and all, but when we talk about 1-10 lines of code it's not a big deal, and Perl... It's just there. Even on Windows Git Bash and mingw come with Perl.
- rwmj 6y agoPython's subprocess is a bit more clumsy than Perl's built in features for running commands, with the proviso that running commands in Perl is best described as "idiomatic". Maybe if you didn't learn it 20 years ago like I did you'd have a hard time with its irregularity and colloquialisms. Is there any non-shell scripting language that makes it as easy as shell to run external commands, redirect I/O etc.? I don't know of any. (Perhaps that is the very definition of a shell.)
- jasonhansel 6y agoAgreed. I really want a language that makes it easy to run subprocesses and do other Unix/shell magic, while being more straightforward and modern than Perl. I think a good way of doing this would be to make a shell that has more expressive power and a clearer syntax.
- Tyr42 6y agoRuby uses the same sorta commands as perl does I think.
- ma2rten 6y agoThis is one of the few things really missing from python. I am wondering how easy it would be to write a PEP for an outsider.
- lmm 6y agoTCL ships with tclsh which is regular TCL (so a first-class programming language) but allows you to invoke external commands as though they were functions (so arguably is a shell in your sense, though I wouldn't advise using it as your login shell).
- lmns 6y agosubprocess.run() isn't too bad.
- jhgb 6y ago> Is there any non-shell scripting language that makes it as easy as shell to run external commands, redirect I/O etc.? Would Scsh count?