93% 的颜料泼溅是合法的 Perl 程序
发布于 2019-04-01。
TLDR:阅读论文并查看这些漂亮 Perl 程序的作品集。
在本文中,我们旨在回答编程语言社区中一个长期存在的开放问题:是否有可能在墙上涂抹颜料而不产生合法的 Perl?
我们对这个问题给出肯定回答:确实有可能在墙上涂抹颜料而不产生合法的 Perl 程序。我们采用实证方法,使用光学字符识别(OCR)软件,发现仅有 93% 的颜料泼溅能被解析为合法的 Perl。我们分析了颜料泼溅 Perl 程序的特性,并给出了七个不是合法 Perl 程序的颜料泼溅示例。

本文被 SIGBOVIK 2019 接收发表,该会议于 2019 年 4 月 1 日在匹兹堡举行。本文获得“不知情参与奖章”,“这是一个不受欢迎的标签,我们在仔细审查后将其贴到每一篇被认定包含真实产物的论文上,从而推进开放科学与富有成果的拖延这一令人钦佩的事业。”
可在 Google Docs 上阅读,或下载 PDF。也可以获取完整的 SIGBOVIK 2019 论文集;我在第 174 页。
补充材料
这里把所有颜料泼溅放在一个页面上,并附上每个对应的合法 Perl 源代码。对于那些未能解析为合法 Perl 程序的图像,用红色写着“Not valid”。如果不同的 OCR 设置识别出多个合法的 Perl 程序,我根据自身的审美判断选择了看起来最“有趣”的那个。
这里有一个包含 100 张颜料泼溅图像的 tarball,它们被用作本文的主要数据集。
(源代码尚不可用,因为我不擅长 GitHub)
勘误
有一些颜料泼溅 Perl 程序直到 SIGBOVIK 提交截止日期之后才被我认定为“有趣”。例如,这个泼溅被 OCR 识别为字符串 lerzfijglpFiji-j,它在 Perl 中求值为数字 0:

下图被识别为字符串 -*?,它在 Perl 中也求值为数字 0:

另一个令人惊讶的程序如下所示;OCR 将这张图像识别为字符串 ;i;c;;#\\?z{;?;;fn':.;, 它在 Perl 中求值为字符串 c:

最后,这张图像被识别为字符串 ;E,'__', 它在 Perl 中求值为字符串 E__:
