版权归原作者所有,如有侵权,请联系我们

[科普中国]-倾斜牙签综合症

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

倾斜牙签综合症leaning toothpick syndrome,LTS)是指在计算机程序设计中,由于表达式包含了大量的转义字符而使代码变得难以阅读,通常是指反斜线("\")开头的转义字符序列。

简介Perl语言的官方文档引入了这一术语,用于描述Unix风格的正则表达式中大量的前向斜线。

LTS出现在许多程序设计语言与许多环境中,包括用于匹配统一资源定位符(URI)的模式(Pattern (software)),以及输出被引用文本的程序中,许多自产生程式属于后一类。1

自产生程序自产生程序(Quine),它以哲学家奎恩命名,指的是输出结果为程序自身源码的程序。

能够直接读取自己源码、读入用户输入或空白的程序一般都不视为自产生程序。

这种编程思想在计算机刚刚兴起的时候就已经出现了。Paul Bratley发表的文章"Computer Recreations: Self-Reproducing Automata"也对此进行了讨论。而已知最早的这类程序在1960年代于爱丁堡大学出现,由Hamish Dewar以Atlas Autocode编写。1

模式的例子下述Perl正则表达式用来匹配在某个FTP服务器的pub目录下的文档的URI1:

m/ftp:\/\/[^\/]*\/pub\//Perl通过允许正则表达式使用其它分界符来解决倾斜牙签综合症。例如,下述三个正则表达式均等价于上例1:

m{ftp://[^/]*/pub/} m#ftp://[^/]*/pub/# m!ftp://[^/]*/pub/!被引用文本的例子以下Perl样例程序用于输出HTML链接的文本,其中URL与显示文本分别存于变量$url与$text之中,代码如下1:

print "$text";注意上述程序中使用反斜线转义双引号。如果使用单引号括起上述字符串表达式,在Perl中是不可行的,因为Perl对单引号字符串不执行变量展开:

print '$text'在许多语言中使用printf函数是可行的办法(Perl,C,PHP):

printf("%s", $url, $text);在Perl中使用qq即可用任意字符代替双引号:

print qq{$text}; print qq|$text|; print qq($text);Here文档特别适合于多行文档;但是,Here文档不能够正确的缩进。这样的Perl示例为1:

print