I know this may come as a shock to the average HN reader, but most people do not think very clearly. Even programmers. And among those who do, it is quite rare that people speak precisely without putting in considerable effort.
> but even easier (and faster) to do on Perl.
You have no objective way to substantiate this claim (because such cannot exist), therefore it is in fact a matter of opinion.
Trivial example:
Replace all numbers in a string:
Perl:
$string =~ s/\d+/NUM/g;
Python: import re
string = re.sub(r'\d+', 'NUM', string)
Perl's design history is text processing as a first-class goal. It has syntax-level efficiency, and expressive power (e.g. s///e, tr///, inline regex flags, etc.). Do you want me to go on? These are all objective ways to substantiate the claims I made.Perl is implemented in C with a runtime that aggressively optimizes text processing. The core primitives such as split, join, substr, index, s///, etc.) are tight wrappers around C functions with minimal object overhead. In Python, even simple string manipulations go through Python's object system, and in Python strings are immutable, so every manipulation creates a new string object, which incurs extra memory allocation and garbage collection.
Perl is typically 30-80% faster in similar regex-heavy workloads because there is no import overhead, internal opcode dispatch for regex, and no allocation of new strings until match is confirmed.
Shall I go on?
[johnisgood@arch regex]$ hyperfine 'perl regex_test.pl' 'python3 regex_test.py'
Benchmark 1: perl regex_test.pl
Time (mean ± σ): 1.807 s ± 0.028 s [User: 1.752 s, System: 0.054 s]
Range (min … max): 1.780 s … 1.857 s 10 runs
Benchmark 2: python3 regex_test.py
Time (mean ± σ): 3.316 s ± 0.230 s [User: 3.246 s, System: 0.069 s]
Range (min … max): 3.052 s … 3.858 s 10 runs
Summary
perl regex_test.pl ran
1.84 ± 0.13 times faster than python3 regex_test.py
This is for a very simple script!You know why?
Because Perl was practically designed for text processing and regex.
It has:
- A regex engine that's deeply integrated and highly optimized.
- Less overhead (no interpreter startup, minimal memory structures).
- Simpler string substitution and less abstraction.
Seriously, it is not a matter of opinion.
I hope you are convinced now.
In case you are not, let me know, I will let you in on a lot of great details. :)
I'm still not sure why this got you so involved.
As I have said a couple of times, it is fair enough that he is comfortable with Python or that he decided to use it for whatever reasons.
At any rate, I cannot come back to this thread anymore. :P
Yet everyone talks about performance when it comes to programming languages. Why? And what does coherence have anything to do with it?
Plus I explained what I meant by that, there is a huge difference in the startup time of Perl and Python, for one, and you can check benchmarks. The implementation of the two languages are not identical. If they are not identical, there must be a difference in performance one way or another, I assume.
> This is incoherent no matter what programming language you are talking about. Of course it's a matter of opinion. Other people aren't going to like the same syntax you do.
I do not think anyone is going to argue that Brainfuck was made with easy string manipulation in mind, or Forth.
The point is that Perl helps you manipulate strings with relative ease. Assuming you know the language, yeah.
In fact, please read other comments, because I have already said this: "For the 100th time, I was responding to "[...] python and it is easy to do string manipulation with.".". It is easy to do so in Python, but even easier (and faster) to do on Perl. In both cases there is an assumption of knowing the language, and I thought that goes without saying.
I said nothing about liking the syntax or whatever you are trying to read into it. It is easy to do string manipulation, regardless of your like or dislike of the syntax. Thus, not an opinion.