Строка #!/usr/bin/perl в Perl cкрипте

Очень часть можно видеть что первая строка в Perl скрипте — это #!/usr/bin/perl.

Вот пример очень простой программы на языке Perl:

▶ Run
#!/usr/bin/perl

print 'Hello';

Если сохранить этот текст в файл script.pl, а потом выполнить в консоли perl script.pl, то на экране появится строка Hello.

Самое интересное, что если убрать из файла script.pl строку #!/usr/bin/perl (оставить только одну строчку print 'Hello';) и запустить этот код с помощью perl script.pl, то результат будет точно такой же — на экране появится строка Hello.

Команда в консоли perl script.pl говорит что нужно запустить интерпретатор perl и в качестве аргумента передать ему строку script.pl (имя файла с кодом программы). При таком запуске совершенно все равно, есть ли в файле script.pl первая строка #!/usr/bin/perl или нет. Система запускает perl, а эта программа уже воспринимает текст из файла как текст программы на языке Perl.

Но команда perl script.pl — это не единственный способ как можно запустить Perl скрипт. Другой вариант — это сделать этот файл исполняемым и выполнить его.

Опять возьмем текст в котором есть специальная первая строка:

▶ Run
#!/usr/bin/perl

print 'Hello';

Сохраним этот текст в файл script.pl и выполним в консоли:

$ chmod a+x script.pl
$ ./script.pl
Hello

С помощью команды chmod a+x script.pl мы установили у файла флаг что он является выполняемым файлом (executable). А дальше с помощью команды ./script.pl сказали что хотим выполнить файл script.pl, который находится в текущей директории (текущая директория обозначается символом точка, а / — это разделитель между директорией и именем файла).

При запуске ./script.pl важно чтобы первая строчка в файле была #!/usr/bin/perl. Если мы уберем эту строчку из файла и попробуем запустить его ./script.pl, то мы получим ошибку:

$ ./script.pl
./script.pl: line 1: print: command not found

Когда Perl скрипт запускается как ./script.pl первая строка в файле обязательно должна быть #!/usr/bin/perl.

Когда мы запускаем исполняемый файл с текстом программы с помощью ./script.pl, то система как-то должна понять чем нужно запускать этот текст программы (Mac OS и linux в этом месте никак не смотрят на расширение файла). Вот как раз для того чтобы обеспечивать этот понимание и используется эта первая строка в специальном формате. Решетка, восклицательный знак, а потом полный путь к интерпретатору с помощью которого нужно запускать код.

Если не указать в файле строку #!/usr/bin/perl и выполнить код с помощью ./script.pl, то система будет считать что код написан на том шелле в котором вы работаете (например, bash) и попробует выполнить текст программы на языке программирования Perl как будто этот текст на bash.

Эта специальная строка, это не специфика языка программирования Perl, а специфика системы. Для других языков программирования тоже есть аналогичные строки #!/usr/bin/python, #!/usr/bin/lua и т.д.

Итого рекомендация — первая строчка в Perl скрипте всегда должна быть #!/usr/bin/perl.

Другие статьи

Комментарии