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.)
"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!
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.
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.
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.
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"...
>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
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
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
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.
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.
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).
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.””
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.
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…
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.
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.
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.
[OP] zenincognito | 14 hours ago
Amorymeltzer | 14 hours ago
0xbadcafebee | 12 hours ago
xhrpost | 11 hours ago
Izkata | 6 hours ago
heresie-dabord | 10 hours ago
"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!
comboy | 4 hours ago
sadboi_fandango | 14 hours ago
HeckFeck | 13 hours ago
don-code | 11 hours ago
kmoser | 11 hours ago
gnabgib | 13 hours ago
2024 (515 points, 125 comments) https://news.ycombinator.com/item?id=40197013
2021 (431 points, 165 comments) https://news.ycombinator.com/item?id=27929730
adamrezich | 13 hours ago
tomhow | 12 hours ago
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)
Someone | 6 hours ago
(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)
TMWNN | 13 hours ago
fractorial | 9 hours ago
layer8 | 13 hours ago
hyperman1 | 7 hours ago
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.
hilariously | 6 hours ago
hyperman1 | 4 hours ago
xg15 | 45 minutes ago
snitty | 13 hours ago
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
brisket_bronson | 13 hours ago
lta | 13 hours ago
hluska | 12 hours ago
bitwize | 12 hours ago
tomaskafka | 12 hours ago
omoikane | 10 hours ago
See also:
https://news.ycombinator.com/item?id=40202182
https://news.ycombinator.com/item?id=19576872
https://codegolf.stackexchange.com/a/48394
toast0 | 5 hours ago
any file name? How about /1
?
criemen | 13 hours ago
Quite some foresight indeed!
baron3dl | 12 hours ago
jacquesm | 12 hours ago
kmoser | 11 hours ago
mlmonkey | 9 hours ago
idlewords | 11 hours ago
polarsanel | 11 hours ago
_doctor_love | 9 hours ago
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!
lisper | 8 hours ago
NoMoreNicksLeft | 9 hours ago
theonemind | 7 hours ago
kqr | 6 hours ago
SoraTakai | 9 hours ago
ashton314 | 9 hours ago
ckdot | 8 hours ago
odo1242 | 7 hours ago
asgraham | 7 hours ago
ideasphere | 9 hours ago
bozdemir | 8 hours ago
michaelt | 4 hours ago
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...
xenic | 7 hours ago
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…
maxlybbert | 2 hours ago
notorandit | 7 hours ago
charcircuit | 6 hours ago
michaelt | 4 hours ago
silvandeboer | 6 hours ago
isolay | 3 hours ago
It is so rare to find proper appreciation for this creative skill.
rurban | 3 hours ago
spwa4 | 2 hours ago