Hacker News new | past | comments | ask | show | jobs | submit login

I use points as I am a bad writer.

* Don't use $a, $b for variable names, affecting sort

* Don't use each for iterating over hashes

* Global effects of ..

* next operator is dynamic

    sub foo() {
        next; #breaks while loop

    while(defined (my $e = shift @items)) { # "0", 0 is false

* http://www.perl.com/doc/FMTEYEWTK/versus/perl.html

* Exception model based on $_ and $@

* print "$foo's fun!";

* `use constant` is broken

* my $a, $b ... declares a global $b. Not DWIM at all.

These language features are not worth the debugging time.

Regarding c) I am not a fan of use strict. If the community's priority is introducing more features like "my $_" than sane exception handling, I don't want to be a part of it and I won't recommend that language to my boss or the next FOSS project.

Did I mention XS bugs ?

You seem to have to magically figured out the art of creating software without bugs.

Its time for you to produce your magical programming language and claim your fields medal.

Till then, there are people who are using and will be using Perl with endlessly growing user base for three decades.

As a side note and talking of bugs, Perl easily has the best testing culture in the entire open source language scenario.

Perl is old. By old I mean powerful, mature, stable, and well known.

Some say it is hard to read. I don't know since I have been using it in production since version 4.

v 3 actually...

What modern language do you use that doesn't also have a laundry list of warts?

Honestly, AFAIK only PHP comes with a bigger laundry list.

The only python wart I know is no block scope

    for i in [1,2,3]:
        print i
    print i # still visible 

Only functions introduce lexical scope in Python/JS. JS has the ===, this, undefined

The only ruby wart for me is the difference between block/lambda/Proc and perly features.

Java/Go/Lua don't turn you into a omlette, with their language features. Nor do they leak memory in XS like perl.

C++ is a differnt story.

EDIT: Added JS

Then you don't know anything about Ruby and Python warts. Take yourself out of the conversation please or at Google before you blather.

Enlighten us.

Python has its own wiki about them for one (first Google hit):


Here is one of the first Google hits for Ruby:


Every languages has warts. Lots of them.

Why doesn't he know anything about Python or Ruby warts? I think his complaint about Python is valid. The other wart I would add is Python having a default empty list in a method signature. In successive calls to the function if you modify the list it retains it's value. (The solution is to have it set to None in the method signature). Read

http://docs.python.org/3/tutorial/controlflow.html#function-... section 4.7.1 if you're curious

Generally though I'd say Perl has hundreds (or maybe thousands) of warts for every one Python or Ruby has.

> my $a, $b ... declares a global $b. Not DWIM at all.

> Regarding c) I am not a fan of use strict

Apparently you also aren't a fan of use warnings, otherwise you would have seen that that my $a, $b doesn't do what you think it does.

    # perl -E 'use strict; use warnings; my $a, $b;'
    Parentheses missing around "my" list at -e line 1.
What you want is

    my ($a, $b);

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact