Почему я не получаю никаких синтаксических ошибок при выполнении скрипта Python с Perl?

82

Я просто написал некоторый тестовый код python в test.py, и я запускаю его следующим образом:

perl test.py

Через некоторое время я осознал свою ошибку. Я говорю "через некоторое время", потому что Код Python фактически выполняется правильно, как в интерпретаторе Python!

Почему мой Perl интерпретирует мой Python? test.py выглядит следующим образом:

#!/usr/bin/python

...Python code here...

Интересно, что если я делаю противоположное (т.е. вызов python something.pl), я получаю много синтаксических ошибок.

  • 6
    Я предполагаю, что это из-за #! в начале файла. В самом деле, если я уберу ее, я получу ожидаемое поведение. Разве это не плохая идея с точки зрения безопасности?
  • 7
    Нет. Точка пути Шебанга это указывать интерпретатор. Если вы не доверяете коду для запуска, то вы не должны запускать его в первую очередь.
Показать ещё 6 комментариев
Теги:

1 ответ

111
Лучший ответ

От perlrun,

Если строка #! не содержит слова "perl" или слово "indir", программа, названная в честь #!, выполняется вместо интерпретатора Perl. Это немного странно, но помогает людям на машинах, которые не делают #!, потому что они могут сообщить программе, что их SHELL -/usr/bin/perl, а Perl отправит программу на правильный интерпретатор для них.

Например,

$ cat >a
#!/bin/cat
meow

$ perl a
#!/bin/cat
meow
  • 31
    Вот это да. Поговорим о ваших неясных чертах. Я использую Perl более 20 лет, и я понятия не имел, что он это сделал.
  • 4
    Я начал использовать Perl v4 в DOS, VMS и Solaris. Именно такие функции, независимые от ОС / мостов, которые сделали кроссплатформенную жизнь намного проще.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню