Эта идиома описана в документации perlrun
.Переключатель -x
сканирует весь файл и игнорирует все, что появляется перед первой строкой, которая начинается с #!
, а также содержит слово perl
.Это означает, что ваша система будет запускать сценарий с интерпретатором Perl независимо от того, вызываете ли вы сценарий с помощью perl
или с помощью команды оболочки (sh/bash/ksh/
и т. Д.), То есть
$ perl this_script
и
$ sh this_script
запустит сценарий с perl
.
Чтобы ответить на ваш второй вопрос, эта идиома не имеет ничего общего с объединением сценария оболочки и сценария Perl в одном файле.Есть несколько разных способов решения этой проблемы, но, возможно, самый читаемый способ - это написать в сценарии оболочки, но использовать нотацию heredoc оболочки для вызова кода Perl.
#!/bin/bash
# this is a bash script, but there is some Perl in here too
echo this line is printed from the shell
echo now let\'s run some Perl
perl <<EOF
# this is now perl script until we get to the EOF
print "This line is printed from Perl\n";
EOF
echo now this is from the shell script again