Сейчас для проверки задач на интерпретируемых языках используется следующий подход:
- Записываем в начало файла "#! interpreter [optional-arg]".
- Копируем все из присланного исходника.
Проблема в том, что
optional-arg должен либо отсутствовать, либо содержать одно слово без пробелов, так как реализация этого механизма на разных системах разная. В Линуксе, например, вся строка после
interpreter передается единым аргументом интерпретатору
[1] [2] [3].
Из-за этого могут возникнуть проблемы для таких языков, как:
- Dr. Scheme (mzscheme.in),
- Perl (perl.in),
- PHP (php.in),
- Python (pypy.in, pypy3.in, python.in, python3.in),
- Ruby (ruby.in),
- yabasic (yabasic.in).
Например, для языка Python строка запуска интерпретатора следующая:
Code: Select all
echo "#! ${PYTHONPATH} -W ignore ${EJUDGE_FLAGS}" > $2
Но запустится он так:
Code: Select all
${PYTHONPATH} "-W ignore ${EJUDGE_FLAGS}" [filename]
Как решить эту проблему со "склеиванием" аргументов?