Подтвердить что ты не робот

Что я должен использовать для Perl script линии shebang?

Какая из них лучше или быстрее использовать в качестве строки shebang для Perl script?

#! perl

#! perl.exe

#! fullpath/perl(/perl.exe)

#! partialpath/perl(/perl.exe)

И при использовании #!perl, когда он работает в конкретной системе, как мне узнать в script, который использует интерпретатор perl, чтобы я мог поместить его в строку shebang?


И, если использовать /path/path/perl, разрешено ли использовать * или ... для папок?

4b9b3361

Ответ 1

Если вам нужен жесткий код #!, используйте #!/usr/bin/env perl. Зачем? Вы хотите, чтобы программа Perl выполнялась с предпочтительным пользователем Perl. Это будет первое в их PATH. #!perl не делает того, что я имею в виду, он не ищет пользователя PATH, #!/usr/bin/env perl - это то, как вы это делаете. /usr/bin/env всегда будет присутствовать в системах Unix.

Если пользователь использует Windows, как указывали другие, это не имеет значения. Windows не использует #! он использует ассоциации расширения файлов. Убедитесь, что ваша программа называется foo.pl или что-то еще, и она будет работать. Но включите #! в любом случае, поскольку некоторые утилиты и редакторы используют его.

Если вы отправляете код, пусть установщик позаботится об этом. И MakeMaker/Makefile.PL, и Module::Build/Build.PL изменят ваш #! чтобы соответствовать пользователю, для которого он был установлен. Они позаботятся об этой проблеме для вас.

Если вы устанавливаете код для собственного производства, вы должны использовать полный путь к определенной копии perl. Какая копия perl? Один конкретный для вашего проекта. Означает ли это, что вам нужно скомпилировать perl для каждого проекта? Нет, вы можете сделать символическую ссылку. Проект foo может иметь /usr/local/bin/fooperl точку в /usr/bin/perl5.18. Используйте #!/usr/local/bin/fooperl. Теперь, если вы решите обновить perl, вы можете сделать это для каждого проекта, изменив символическую ссылку.

Ответ 2

Windows (вычитается из бита perl.exe), кажется, не имеет значения, так как ваша оболочка (ахум), вероятно, даже не анализирует ее (исправьте меня, если я ошибаюсь, может быть изменен в последнее время).

Некоторые флаги командной строки все еще могут быть подняты самим Perl, хотя (в соответствии с этим потоком).

Ответ 3

  • Как отметил ChristopheD, я могу подтвердить на практике (ActivePerl на XP), что строка shebang на самом деле не нужна в Windows.

    Строка shebang сообщает оболочке Unix, интерпретатору которой передается script to.

    В Windows программа для передачи script в будет определяться ассоциациями на основе расширения.

  • В Unix лучше всего использовать третий вариант (полный путь к perl исполняемому файлу).

    И да, вы можете использовать ".." в теории (оболочка не заботится), но вы не должны использовать относительный путь - вы никогда не знаете, какой будет ваш текущий рабочий каталог при выполнении script.

Ответ 4

Если вы используете CGI через Apache в Windows, используется SHEBANG. Вам понадобится полный путь к perl.

Ответ 5

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

Ответ 6

Первая строка означает shebang. Он в основном говорит о программе, где Perl-интерпретатор находится, поскольку Perl интерпретируется языком. В Linux вы можете ввести терминал:

whereis perl

который даст вам точное местоположение. Обычно он находится внутри /usr/bin/perl. Это означает, что вы хотите сделать shebang относительно /usr/bin/perl

#! /usr/bin/perl

use strict;
use warnings;
use v5.10.1;
.
.
.

Это просто хорошая практика, поэтому это, очевидно, самое быстрое решение.

Надеюсь, вы найдете это полезным,

Спасибо.

Ответ 7

И при использовании "#! perl", когда он работает в конкретной системе, что означает print() для отображения полного пути к perl.exe, который может быть включен в строку Shebang?

Хорошо, если вы используете инструкцию print, вы уже выполняете код perl, поэтому...

Ответ 8

Это одна из вещей, которые мне не нравятся в Perl.

В Windows, если вы используете хотя бы ActiveState Perl, если файл заканчивается на .pl, тогда в реестре Windows будет запущен интерпретатор Perl, независимо от линии shebang. На Cygwin я не уверен, почему работает #! perl. В Unix вы должны поместить полный путь к вашему исполняемому файлу Perl в строке shebang. Идея Шверна по использованию env удобна, но имеет некоторую опасность, как я указал в комментарии.

Вот почему я предлагаю вам лучшее решение для упаковки ваших сценариев Perl в виде модулей CPAN. Установщики CPAN, такие как Module:: Build, затем изменят строку shebang на полный путь к вашему интерпретатору Perl. (Я не уверен, что установщик Schwern, ExtUtils:: MakeMaker, делает это или использует env, так как я его не использую.)