Каков рекомендуемый способ упаковки perl-скриптов для CPAN (и CorporatePAN)? - PullRequest
3 голосов
/ 21 декабря 2010

Недавно я посмотрел модуль на CPAN, который поставляется с установленным скриптом что заставило меня задуматься. Каков рекомендуемый способ включения скрипта в пакет? это должно в конечном итоге на общедоступной CPAN и если есть какие-либо другие рекомендации для пакеты, которые будут выпущены на собственном сервере CPAN?

Сценарий начинается так:

#!/usr/bin/perl

eval 'exec /usr/bin/perl  -S $0 ${1+"$@"}'
  if 0; # not running under some shell

Два вопроса

Правильно ли я понимаю, что eval-часть не нужна? Это будет встроено клиентом CPAN во время установки и будет сильно отличаться при установке в Windows.

Какая рекомендуемая линия sh-bang? Это будет

#!/usr/bin/env perl

вместо вышесказанного?

Ответы [ 2 ]

6 голосов
/ 21 декабря 2010

Просто используйте

#!/usr/bin/perl

(или, при желании, любой путь к perl на вашем компьютере разработчика).

Когда Module :: Build или MakeMaker устанавливает ваш скрипт,он изменит строку #! в соответствии с perl, в котором устанавливается модуль.Он также добавит строки «eval exec», за исключением Windows, где вместо этого будет создан файл .bat.(Клиент CPAN не имеет к этому никакого отношения.)

Если вы используете

#!/usr/bin/env perl

, то установщики не поймут, что это скрипт Perl, и не изменят #!линия.

3 голосов
/ 21 декабря 2010

Когда устанавливается дистрибутив, он устанавливается для какого-то определенного perl и должен явно устанавливать #!использовать этот Perl (как указано в $Config{startperl}).Насколько я знаю, все установщики модулей делают это для вас.(Обновление: как отмечается в cjm, только если #! В качестве распределенного запускает perl, а не env.)

Класс eval традиционно включается для автоматического использования perl, даже если скрипт вызывается с sh scriptname.Это безвредно.

...