Глава 18: Преобразование других программ в Perl-программы
18.2 Преобразование sed-программ в Perl-программы
Может быть, вам покажется, что мы повторяемся, но угадайте, что мы сейчас скажем? А вот что: Perl — семантическое надмножество не только awk, но и sed.
С дистрибутивом поставляется конвертор sed-Реrl, который называется s2p. Как и а2р, s2p получает со стандартного ввода sed-сценарий и направляет на стандартный вывод Perl-программу. В отличие от результата работы а2р, преобразованная программа редко ведет себя не так, как нужно, поэтому вы вполне можете рассчитывать на ее нормальную работу (при отсутствии дефектов в самой s2p или Perl).
Конвертированные sed-программы могут работать быстрее или медленнее оригинала. Как правило, они работают значительно быстрее (благодаря хорошо оптимизированным Perl-программам обработки регулярних виражений).
Конвертированный waf-сценарий может работать с опцией -n или без нее. Опция -n имеет тот же смысл, что и соответствующий ключ для sed. Чтобы воспользоваться этой опцией, конвертированный сценарий должен направить сам себя в препроцессор С, а это несколько замедляет запуск. Если вы знаете, что всегда будете вызывать конвертированный wdf-сценарий с опцией -n или без нее (например, при преобразовании wdf-сценария, используемого в больших shell-программах с известными аргументами), вы можете информировать утилиту s2p об этом (посредством ключей -n и -р), и она оптимизирует сценарий под выбранный вами ключ.
В качестве примера, демонстрирующего высокую универсальность и мощь языка Perl, отметим тот факт, что транслятор s2p написан на Perl. Если вы хотите увидеть, как Ларри программырует на Perl, взгляните на этот транслятор — только сначала сядьте, чтобы не упасть (даже с учетом того, что это очень древний код, относительно не изменившийся с версии 2).