倾斜牙签综合症(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: