Сообщение об ошибке «Нет такого файла или каталога» не приходит ни от Apache, ни от Perl. Когда Apache вызывает сценарий, он передает выполнение интерпретатору командной строки (CLI) системы. Этот CLI открывает файл сценария и читает первую строку «#! / Usr / bin / perl» (строка shebang).
Как уточнил Сэм Ценг, файл, очевидно, содержит последовательность символов разрыва строки Windows: " \ r \ n" (шестнадцатеричный код: x0D x0A, символы: CR LF). Теперь интерпретатор CLI читает строку до символа "\ n". CLI не распознает символ "\ r", поэтому он становится частью пути "/ usr / bin / perl \ r " и больше не является частью переноса строки.
Почему опция '-w' решает эту проблему?
Когда вы добавляете параметр '-w', символ '\ r' становится частью аргумента "-w \ r". Путь к исполняемому файлу Perl теперь можно найти "/ usr / bin / perl", а "-w \ r" передается в качестве аргумента командной строки. Тем не менее, Perl хорош и не вызывает ошибок при обработке опции "-w \ r".