4 ms·
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 .. *
by prollyignored 13y ago
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
foo();
}
* http://www.perl.com/doc/FMTEYEWTK/versus/perl.html 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 ?
- kamaal 13y agoYou 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.
- peteretep 13y agoWhat modern language do you use that doesn't also have a laundry list of warts?
- prollyignored 13y agoHonestly, 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
- sigzero 13y agoThen you don't know anything about Ruby and Python warts. Take yourself out of the conversation please or at Google before you blather.
- hello3 13y agoWhy 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-annotations 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.
- rimantas 13y agoEnlighten us.
- sigzero 13y agoPython has its own wiki about them for one (first Google hit): http://wiki.python.org/moin/PythonWarts http://wiki.python.org/moin/PythonWarts Here is one of the first Google hits for Ruby: http://jgaskins.org/blog/2012/05/16/ruby-warts/ http://jgaskins.org/blog/2012/05/16/ruby-warts/ Every languages has warts. Lots of them.
- lifeguard 13y agoPerl 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.
- lifeguard 13y agov 3 actually...
- kbenson 13y ago> 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);