Каково точное значение find2perl perl shebang + eval? - PullRequest
4 голосов
/ 25 мая 2011

Что точно делает следующее?

#! /usr/bin/perl -w
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if 0; #$running_under_some_shell
  • if 0 никогда не соответствует истине, поэтому часть eval никогда не будет выполнена,
  • и eval тоже странный - какое значение $0 в этом контексте (внутри одинарных кавычек?)

Ps: взято из результата команды find2perl

Ответы [ 2 ]

4 голосов
/ 25 мая 2011

Я нашел здесь несколько дискуссий: http://www.perlmonks.org/?node_id=825147

Расширенный хэшбанг есть, чтобы вы можно запустить свой Perl-скрипт с почти любой / бин / ш под солнцем, даже оболочка / ядро, которое не соблюдает hashbang, и он все еще будет запускать Perl в конце концов.

4 голосов
/ 25 мая 2011

Наилучшее предположение - как в этом комментарии #$running_under_some_shell, это определить, выполняется ли скрипт какой-либо оболочкой, отличной от perl, например, Баш.

, если 0 никогда не является истиной, поэтому часть eval никогда не будет выполнена,

Не по perl, нет. В других оболочках, таких как bash, он не обнаружит продолжения строки и просто выполнит оператор eval. Это затем повторно запускает скрипт под Perl. (Как ни странно с параметрами, отличными от строки хэш-бенга.)

и eval тоже странный - каково значение $ 0 в этом контексте (внутри одинарных кавычек?)

Опять же, это будет расширено с помощью bash, а не perl: здесь это означает путь к find2perl для передачи в интерпретатор perl.

...