perl: здесь документы внутри оператора возврата

#perl #backticks

#perl #обратные отсчеты

Вопрос:

Учитывая, что программа-утилита, которая принимает команды из stdin и возвращает полезный код выхода, этот синтаксис perl работает:

 my $result = `utility -switch1 -switch2 <<HERE
set ridin_round_the_world TRUE;
do this;
sign that;
try { 
   make some_girl; 
   return 0;
} 
except { 
   sleep --week;  
   exit 1;
}
HERE`;
print "result is $resultn";
  

Под «работает» я подразумеваю, что скрипт perl запускает утилиту, переходит в список команд, ожидает завершения работы утилиты и возвращает результат.

Но почему это работает? Как backtick узнает, что нужно вызвать программу, а затем передать документ HERE? Мне просто повезло с моей реализацией perl, или это стандартное поведение?

Ответ №1:

Это here-doc от shell, а не от Perl. Попробуйте запустить в командной оболочке:

 % cat <<EOF
some
thing
EOF
  

Комментарии:

1. Ах, так что я могу прочитать это как «обратное нажатие выполняет интерполяцию переменных, а затем отправляет все в оболочку». В этом есть смысл.