Under Perl, the first line together with the second line is simply a syntactically valid statement that will never be executed. Under the shell, only the first line will ever be seen and executed by the shell. The shell will interpret the line as
eval 'exec perl -S -x -- "$0" ${1+"$@"}'
where $0, quite unsurprisingly, will be replaced by the name of the perl program. $@ expands to the quoted list of arguments and ${1+"$@"} seems to be a fancy shell way of writing "$@". See the article I already linked,
the section titled Problems 1--3 can be overcome quite easily:, from which I took this whole discussion. For the rest, see your shell manual. |