Я просто написал некоторый тестовый код python в test.py
, и я запускаю его следующим образом:
perl test.py
Через некоторое время я осознал свою ошибку. Я говорю "через некоторое время", потому что Код Python фактически выполняется правильно, как в интерпретаторе Python!
Почему мой Perl интерпретирует мой Python? test.py
выглядит следующим образом:
#!/usr/bin/python
...Python code here...
Интересно, что если я делаю противоположное (т.е. вызов python something.pl
), я получаю много синтаксических ошибок.
От perlrun,
Если строка
#!
не содержит слова "perl" или слово "indir", программа, названная в честь#!
, выполняется вместо интерпретатора Perl. Это немного странно, но помогает людям на машинах, которые не делают#!
, потому что они могут сообщить программе, что их SHELL -/usr/bin/perl, а Perl отправит программу на правильный интерпретатор для них.
Например,
$ cat >a
#!/bin/cat
meow
$ perl a
#!/bin/cat
meow
#!
в начале файла. В самом деле, если я уберу ее, я получу ожидаемое поведение. Разве это не плохая идея с точки зрения безопасности?