93% of paint splatters are valid Perl programs (2019)
484 points by zenincognito 15 hours ago | 60 comments

snitty 14 hours ago
SIGBOVIK papers are almost always a delight

EDIT: From their 2026 publication

>Permission to make digital or hard copies of portions of this work for personal use is granted; permission to make digital or hard copies of portions of this work for classroom use is also granted, but seems ill-advised

reply
gnabgib 15 hours ago
Popular in:

2024 (515 points, 125 comments) https://news.ycombinator.com/item?id=40197013

2021 (431 points, 165 comments) https://news.ycombinator.com/item?id=27929730

reply
tomhow 13 hours ago
And others! Here's the full list:

93% of paint splatters are valid Perl programs (2019) - https://news.ycombinator.com/item?id=40197013 - April 2024 (124 comments)

93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=27929730 - July 2021 (163 comments)

93% of Paint Splatters Are Valid Perl Programs - https://news.ycombinator.com/item?id=20834351 - Aug 2019 (7 comments)

93% of Paint Splatters Are Valid Perl Programs - https://news.ycombinator.com/item?id=19576425 - April 2019 (132 comments)

reply
Someone 7 hours ago
You missed https://news.ycombinator.com/item?id=38754686 (1 comment)

(Found by clicking the ‘past’ hyperlink leads me to https://hn.algolia.com/?query=93%25%20of%20paint%20splatters..., which gives me six results)

More interestingly, gnabgib reported a different number of comments, leaking the fact that they have showdead on (and you have it off)

reply
adamrezich 14 hours ago
The reply near the top of the 2021 link with the Master Foo koan hits quite a bit differently in the age of vibecoding.
reply
layer8 14 hours ago
Tangentially related, the only way for a Java properties file to be invalid is if it contains an invalid Unicode escape sequence (“\u” not followed by four digits, and not preceded by an odd number of “\”). After resolving Unicode escapes, any character sequence is a valid properties file.
reply
hyperman1 8 hours ago
I've had a program where some R code stuffs some input in an URL, fires it at a server, then reads the returned CSV. No error handling or validation is attempted.

As it happens, basically anything is a valid CSV.

If the input is wrong, the server responds with an XML error. This got interpreted as a CSV. Every line became a record, but no column headers were found so every expected field is null/NA. All these nulls get nicely sorted and processed, which causes more string errors, etc ... Mayhem ensues when thst stuff ends up in a database.

reply
hilariously 8 hours ago
CSV is not a format, its a vague idea, https://www.youtube.com/watch?v=YrqSp8m7fmk - this is a great video on how to make it fast, and how its pretty bad
reply
hyperman1 5 hours ago
Can't agree more. I've dealt with a CSV where multiple CSVs were cat'ted together, but the originals were not in the same dialect and differed even in charset encoding. Wrote a statistics based parser that decided which part of the file had to be decoded which way. Interesting technical challenge, but my god the reasons for its existence were dumb.
reply
xg15 51 minutes ago
Falsehoods programmers believe about CSV: "Yeah, sure it's a mess and there are like, a gazillion different dialects of it, but at least once you know the dialect of a file, you can decode it"...
reply
zenincognito 15 hours ago
The actual paper is also highly entertaining - https://www.mcmillen.dev/sigbovik/2019.pdf
reply
heresie-dabord 11 hours ago
From the paper:

"An interesting thing about these images is that they’re not particularly Perl-specific; for example, the program shown in Figure −3 also evaluates as the number −3 in Python (and presumably several other programming languages.)"

We live in the age of Python, which I use every day. But I still also use Perl when it's the better tool for the job. And it often is!

reply
Amorymeltzer 15 hours ago
In particular, I like "Figure − 3. − 3 ." as a good little easter egg.
reply
0xbadcafebee 13 hours ago

  The remainder of the valid Perl programs are mostly valid due to a Perl
  language feature that is not commonly present in most programming languages.
  Namely, Perl has a feature called “unquoted strings”, in which a sequence
  of alphanumeric characters by itself is parsed as though it were a quoted string.
  As an example, Figure 5 is read by OCR as the text ME, which evaluates to the
  string “ME” even though the ME isn’t quoted. This would result in a syntax
  error in most other programming languages.

  (To be fair to Perl, when perl is run with the -w flag to enable warnings, it does
  helpfully inform the user that at some point in the future, the Perl developers
  will most likely pick gggijgziifiiffif as a new reserved word:
      Unquoted string "gggijgziifiiffif" may clash
      with future reserved word at - line 1.)
reply
xhrpost 12 hours ago
So they might be valid older(<v5?) PHP scripts as well?
reply
Izkata 7 hours ago
PHP 5 had unquoted strings, and it looks like 7 did as well, but not 8.
reply
comboy 5 hours ago
For those who do not enjoy reading scientific papers this one is worth reading.
reply
rurban 4 hours ago
That's with the flexible perl5 parser with a dynamic lexer, which allows everything. For my new faster perl backend perl11-p2 I am using a PEG parser, similar to raku, which needs static rules for everything. So I bet it will not accept most of the noise. But I still can run only 50% of all perl programs.
reply
ideasphere 10 hours ago
I’m more interested in how the OCR missed that ‘Stitch & Shutter’ watermark in the third one.
reply
michaelt 5 hours ago
It looks like the author used Tesseract, a traditional OCR image with lineage going back to HP flatbed scanners in the 1980s [1]

Obviously, it's been improved a lot since then - but traditional OCR is mostly about black text on white backgrounds. Or at least, the text being high-contrast relative to the rest of the document.

Light gold text on a white background, while there are black splatters? That's the sort of thing it would struggle with for sure.

[1] https://static.googleusercontent.com/media/research.google.c...

reply
bozdemir 10 hours ago
Hahahhahah good catch.
reply
baron3dl 13 hours ago
i loved programming perl. both the act, and the book. i long since gave it up, but i am still awed by how it could both be completely unceremonious and absurdly ceremonious. my $self = shift; for instance.
reply
dukoid 8 minutes ago
Now I wonder if that holds for Objective C programs, too....
reply
idlewords 12 hours ago
A whole new twist on "Hackers and Painters"
reply
jacquesm 13 hours ago
Someone should reverse that and see how many paintings can be made to execute as Perl and what those programs do when invoked.
reply
kmoser 12 hours ago
You could kill two birds with one stone by entering them in the Obfuscated Perl Contest, were it still being held.
reply
mlmonkey 10 hours ago
Every single day there's an Obfuscated Perl Contest being held somewhere on this planet....
reply
isolay 4 hours ago
> fruitful procrastination

It is so rare to find proper appreciation for this creative skill.

reply
charcircuit 7 hours ago
This is more about a bad OCR than about paint splatters. They also tried multiple OCR settings until one worked. If you used more accurate OCR this would be very different.
reply
michaelt 5 hours ago
More accurate OCR would recognise the images have no text

  $ touch temp.pl; perl temp.pl; echo "exit code $?"
  exit code 0
which is a valid perl program. And that one image with the watermark "stitch & shutter" ?

  $ echo "stitch & shutter" > temp.pl; perl temp.pl; echo "exit code $?"
  exit code 0
Also valid perl.
reply
SoraTakai 10 hours ago
It all depends on which OCR to use and therefore meaningless. It is especially more meaningless since they do not establish the baseline (OCR "pass" % on random input).
reply
ashton314 10 hours ago
I think you’ve missed the point…
reply
ckdot 9 hours ago
Honest question, and I’m not the person you answered to: what is the point? I sincerely don’t get it.
reply
asgraham 8 hours ago
Well a) it’s mostly a joke, b) to the extent it’s not a joke, it’s about how Perl accepts absurd inputs as valid programs, c) OCR paint splatters are just a funny way to get to weird arbitrary strings, of which a strangely high percentage (say, 93%) are valid Perl programs, d) so the choice of OCR doesn’t really affect the “validity” of the result, and e) the author did actually try multiple OCR settings and, when multiple OCRs produced valid Perl programs, chose “the most “interesting.””
reply
odo1242 8 hours ago
It's a joke about Perl. It's not meant to be taken seriously as a study about OCR.
reply
xenic 8 hours ago
Perl is such a ride. I wrote and maintained a nms/statistics/alerting stack around 2003-2004, ended up being around 200k LoC iirc. Just heard it is still in use at that company. My condolences to whoever has had to maintain that monster.

I was somewhat pleasantly surprised a few days ago when an LLM out of the blue decided to use perl, not python, for some simple scripting. There is hope in the world yet…

reply
maxlybbert 3 hours ago
And Perl from 2003-2004 was especially bad. It took amazing effort to pass a file handle as a subroutine parameter. I once took a look at the Perl code behind Bugzilla, and quickly decided that it was better to let sleeping dogs lie.
reply
brisket_bronson 14 hours ago
Figure 6 represents the string “gggijgziifiiffif”, which by pure coincidence happens to accurately represent the authors’ verbal reaction upon learning that “unquoted strings” were a feature intentionally included in the Perl language
reply
omoikane 11 hours ago
There is a gem in the footnote right below gggijgziifiiffif, where it says it's possible to make a perl error quine by writing this line to the right location:

    Illegal division by zero at /tmp/quine.pl line 1.
I just tried this perl 5.42.0, and any file name starting with a '/' will work.

See also:

https://news.ycombinator.com/item?id=40202182

https://news.ycombinator.com/item?id=19576872

https://codegolf.stackexchange.com/a/48394

reply
toast0 6 hours ago
> I just tried this perl 5.42.0, and any file name starting with a '/' will work.

any file name? How about /1

?

reply
lta 14 hours ago
I'm afraid I have to tell you you lack the soul of a poet to truly appreciate the brilliant design . Perl is magic (like litteraly). I'm fairly sure it's one of the untold inspiration of the Harry Potter books
reply
hluska 13 hours ago
I really dig your whimsy.
reply
tomaskafka 13 hours ago
This is also a valid Perl program (I bet)
reply
bitwize 13 hours ago
necronomicon, maybe
reply
polarsanel 12 hours ago
93% of Perl Programs are valid Paint Spatters too.
reply
silvandeboer 7 hours ago
The modern version would be to input the image without further context into an LLM and constrain the output to valid Rust.
reply
sadboi_fandango 15 hours ago
Jackson Pollock was writing perl code all along
reply
HeckFeck 14 hours ago
My Stone Roses album cover is actually a bonus Perl program?
reply
don-code 12 hours ago
Full Fathom Five is my brain on Perl.
reply
kmoser 12 hours ago
No, when Pollock spattered paint on a canvas, it was generally on the floor, not the Wall.
reply
criemen 14 hours ago
> Apparently in the brave new world of neural nets, Anything Goes™

Quite some foresight indeed!

reply
spwa4 3 hours ago
Luckily with AI, that has since increased to 100% with a small prompt ...
reply
notorandit 8 hours ago
The problem is the ocr, then.
reply
_doctor_love 10 hours ago
I don't need to read the article because the headline is true.

A mentor taught me that you can also roll your face on the keyboard to produce a valid Perl program. It's easy and fun to try!

reply
lisper 9 hours ago
A cat walking across the keyboard works too.
reply
NoMoreNicksLeft 10 hours ago
I thought perl was finally dead enough people would stop mocking it. I'll wait til next decade.
reply
kqr 8 hours ago
Perl is not dead! Its popularity has merely reached dotcom level! https://entropicthoughts.com/what-killed-perl
reply
theonemind 8 hours ago
History in reverse: first you win, then they mock you, then they ignore you
reply
kronks 8 hours ago
[dead]
reply
TMWNN 14 hours ago
reply
fractorial 10 hours ago
I think this is the first time I’ve seen a TikTok link on HN.
reply
lakt42t 10 hours ago
[dead]
reply