Hacker News new | ask | show | jobs
by _xk9i 707 days ago
The case for Perl is just that it has no limits. You will never run out of tool if you go with Perl. That is what, I believe, makes the investment worthwhile.

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.

2 comments

This is good insight. Limits are often built into programming languages. Java is all about the limits. TS's selling point is literally the limits. As well as every opinionated language.

I wonder if AI will make limitless languages easier to work with and maintain.

I'm not against limits in programming languages. They help to reduce the complexity that have to be managed.

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".

You can also break from a loop from a subroutine.

  sub test() {last unless $_}
  for (1, 2, 0, 3) {
    print "$_\n";
    test;
  }
  // 1 2 0
I miss it :(
To me, having to be the compiler and have 100% test coverage for typos is a limit. TS is a lame, misguided attempt to correct that to let people keep using such limited languages for things.
My reason to break up with Perl was the lack of garbage collection and then later the lack of types and then later 6.

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.

There are two types of programming, and each has its own definition of "relevant": new programming, with its preference for ready-made components to reduce complexity, and old-time creative programming, which usually was about the creation of new things.

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.

I'm a practical man, for me it's just n_loc difference and more useful imlicitness (and the listed downsides). Not sure if I can understand this "creation" part, even as a former Perl-ist. I think you can turn any language into Perl, it just happens that their core beliefs are incompatible with its ways.

For example, I can easily imagine something like this:

  import 'use-perl'

  while (await ls_lr('./*.txt')) {
    while (await read_lines($filename)) {
      print($ln, $line)
But it's not idiomatic as it uses awful implicit iterators and hideous globals. This conflict is purely dogmatic and doesn't need special syntax, for the most part.
The "creative" part is all decisions to be made before coding: architecture, design, modularization, algorithms, APIs, etc.

If I am in charge of those decisions, I can use Perl to build a prototype, to validate the solution I am creating.

But if I don't decide anything, my job is to code whatever. No chance for me to be creative.

Most quirks of Perl are there to make the construction of prototypes easier and faster.

To know more about creators and their tools, I recommend:

- "Programming is (should be) fun!", by Gerald Jay Sussman. https://m.youtube.com/watch?v=2MYzvQ1v8Ww

- "On Writing", by Stephen King. Just the chapter "Toolbox".