使用Perl执行Python脚本时,为什么不会出现语法错误?

Dac*_*cav 84 python perl

我刚刚编写了一些测试python代码test.py,我将按如下方式启动它:

perl test.py
Run Code Online (Sandbox Code Playgroud)

过了一会儿,我意识到自己的错误.我说"过了一会儿",因为Python代码实际上是正确执行的,就好像在Python解释器中一样!

为什么我的Perl会解释我的Python?test.py看起来像这样:

#!/usr/bin/python

...Python code here...
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我做相反的事情(即调用python something.pl),我会得到大量的语法错误.

ike*_*ami 114

来自perlrun,

如果该#!行不包含单词"perl",也不包含单词"indir",#!则执行该程序而不是Perl解释程序.这有点奇怪,但它可以帮助那些不能做的人#!,因为他们可以告诉程序他们的SHELL是/ usr/bin/perl,然后Perl会将程序分派给正确的解释器.

例如,

$ cat a
#!/bin/cat
meow

$ perl a
#!/bin/cat
meow
Run Code Online (Sandbox Code Playgroud)

  • 哇.谈谈你的晦涩功能.我已经使用Perl超过20年了,我不知道它做到了这一点. (31认同)
  • 我开始在DOS,VMS和Solaris上使用Perl v4.这样的操作系统不可知/桥接功能使跨平台生活变得如此简单. (4认同)
  • 这仅仅巩固了Perl作为编程语言厨房接收器的声誉.作为一个有趣的观察,我相信shebang的原始实现是一个shell特性,它后来才进入Unix内核.Perl包含许多shell机制(例如用于替换命令输出的反引号),这只是一个. (2认同)
  • `ruby` 做同样的事情 >.< (2认同)