I find myself being totally lost on the command line when I need to do more complex stuff - a series of pipes between greps and cuts and the works. Recently, I finally took some time to try to learn some awk and it was life changing. I’ve been doing some awk puzzles, but it occurred to me that if I’ll be deliberately spending time learning a command line text processing tool, I may as well go the extra mile and learn perl, which I’ve heard is far more expressive than gawk.
I’m also noticing a lack of literature on Perl on the command line, I.e “perl -nae <some script>”.
Is awk just better for this use case?
Why Perl gets such a bad rap, then? I'll tell you.
I've used Perl for almost 30 years now, and I've never found any limits in the tool. This means every limit I found was _mine_. Many programmers feel bad when they find their own limits, but it doesn't have to be the case.
You should be OK with finding your own limits, and be willing to overcome them, and strive to become a Perl power user, just like the founder, Larry Wall.
If you choose this, to grow and improve and be better, and better, and better, then Perl is the best option.
It's up to you.
I wonder if AI will make limitless languages easier to work with and maintain.
Limited languages are suitable for those that are willing to manage only so much. That's why Java has no "goto".
But Perl does offer "goto". Why? Because Larry Wall built Perl for himself, and he wanted the most powerful tool that he could conceive. That's exactly what Perl is.
And I accept that, and I really want that. Every time I mess up with Perl, I don't blame my tool. I just laugh out loud and exclaim: "Thanks, Larry, for letting me know another way to not be up to my job".
Perl is the magic wand. If you don't want to be a magician, you don't need it.
But if you want to be a magician, you'll be thrilled to know Perl has three forms of "goto", not just one. This is what the textbook says about the third one: "The goto &NAME form is highly magical and sufficiently removed from the ordinary goto to exempt its users from the opprobium to which goto users are customarily subjected".
I don’t think investing in it is wise when you can invest in something more relevant. Although there’s barely anything that covers the subj as much as Perl, which is a shame on us all. A programming language that requires an import or two to dig through a file is degenerate. Old languages understood well what a programmer needs.
The "creation" part is key. Perl is a tool for "easy creation", for creators that want to be more productive. This is what Larry Wall wanted.
This is why Perl is good for prototyping. You "create" the prototype, and then you "translate" it to something else.
Perl is quite relevant for me, but I say this as a creator.
perl is more of a completely replacement for sh+awk for a standalone script/program. it was the first scripting language i know of that could do sockets networking and other complex things you'd previously need to write in c. it has extremely powerful text processing capabilities, like awk. but it's a big complicated, unusual scripting language. if you want a big complex full-featured scripting language to make a complete tool these days, why not use Python? if you only need really fancy text manipulation, maybe Perl, but i don't see that use a lot.
[1] https://www.gnu.org/software/gawk/manual/html_node/index.htm... [2] https://awk.dev/
Ruby is heavily inspired by Perl and lets you do a lot of work with simple one liners embedded in Bash scripts.
It's also great for longer standalone programs and there is a larger community.
Lots of interesting Perl-isms are also doable in Ruby.
I have written a book on Perl one-liners with plenty of examples and exercises [0]. I've also written books on CLI text processing tools like grep, sed, awk and coreutils [1]. If you prefer just solving exercises, check out my interactive TUI apps [2].
>Is awk just better for this use case?
It depends on the kind of tasks you'd need to solve. I generally prefer grep, sed and awk first. Perl helps if I need powerful regexp and other niceties like the huge number of built-in functions and access to third-party libraries.
[0] https://learnbyexample.github.io/learn_perl_oneliners/
[1] https://github.com/learnbyexample/scripting_course#ebooks
[2] https://github.com/learnbyexample/TUI-apps
Your work is excellent! Thank you, I’ll buy a copy soon.
Searching for 'perl one liners' and the related term 'perl golf' gives many articles and books:
https://www.perl.com/article/perl-one-liners-part-1/
https://www.perl.com/article/perl-one-liners-part-2/
https://catonmat.net/perl-one-liners-explained-part-one
https://catonmat.net/perl-one-liners-explained-part-two
https://catonmat.net/perl-one-liners-explained-part-three
https://catonmat.net/perl-one-liners-explained-part-four
https://catonmat.net/perl-one-liners-explained-part-five
https://catonmat.net/perl-one-liners-explained-part-six
https://catonmat.net/perl-one-liners-explained-part-seven
http://novosial.org/perl/one-liner/
https://www.oreilly.com/library/view/perl-one-liners/9781457...
So you can start by spending 20 minutes to learn awk, and then spend 20 years to learn Perl (and use awk in the mean time)
[1]: https://ferd.ca/awk-in-20-minutes.html
Perl was inspired by awk, not the other way around. Perl is more general purpose.
that said, i found it gives a lot of 'foot-guns'.
Most of those are for backward compatilibity with earlier versions.
Recommend you place the following at the top of your Perl scripts:
These are recommended for all scripts: https://learn.perl.org/first_steps/The issue with awk is that there are multiple non-interoperable implementations:
https://en.wikipedia.org/wiki/AWK#Versions_and_implementatio...
https://stackoverflow.com/questions/40409632/what-is-the-dif...
This makes awk scripts less portable than other text processing tools.
awk is also not extensible--it can be awkward (heh) to adapt it to some problems and big scripts get difficult to wrangle.
awk is great if your text processing problem is small.
Sometimes small problems grow in which case Perl tends to be a better choice:
https://stackoverflow.com/questions/366980/what-are-the-diff...
People love to hate perl, but there is a reason why it was installed on all Unix and Linux systems by default and was so popular for web servers on the early Internet (e.g. Apache mod_perl https://perl.apache.org/ and perl mason https://www.perl.com/pub/2002/12/11/mason.html/ ).
Perl also popularized regular expressions as a standard component of programming languages so much that "Perl-compatible regular expressions" are probably the most widely-used regex flavor versus POSIX or other regex variants:
http://www.pcre.org/
https://en.wikipedia.org/wiki/Regular_expression
AWK has that one covered fair and square, even BusyBox has AWk.
If you want more information about running Perl on the command line then start with https://perldoc.perl.org/perlrun (or `perldoc perlrun` in your shell)