Глава 18: Преобразование других программ в Perl-программы
18.1 Преобразование awk-программ в Perl-программы
Одна из самых замечательных особенностей Perl состоит в том, что он представляет собой семантическое надмножество (как минимум) языка awk. С практической точки зрения это значит, что если вы можете сделать что-либо в awk, вы сможете сделать это и в Perl. При этом, однако, Perl не обладает синтаксической совместимостью с awk. Например, переменная NR (номер входной записи) awk представляется в Perl как $.
Если у вас есть аwk-программа и вы хотите выполнить ее Perl-вариант, можно осуществить механическое Преобразование этой программы с помощью утилиты а2р, которая есть в дистрибутиве Perl. эта утилита конвертирует синтаксис awk в синтаксис Perl и может создать непосредственно выполняемый Perl-сценарий для подавляющего большинства awk-программ.
Чтобы воспользоваться утилитой а2р, поместите свою awk-программу в отдельный файл и вызовите а2р с именем этого файла в качестве аргумента или переадресуйте стандартный ввод а2р на ввод из этого файла. В результате на стандартном выводе а2р вы получите нормальную Perl-программу. Например:
$ cat myawkprog
Bb.SIN { sum = 0 )
/llama/ ( sum += $2 )
END { print "The llama count is " sum }
$ a2p <myawkprog >myperlprog
$ perl myperlprog somefile
The llama count is 15
$
Можно также направить стандартный вывод a2p прямо в Perl, потому что интерпретатор Perl принимает программу со стандартного ввода, если полу-чает такое указание:
$ a2p <myawkprog I perl - somefile
The llama count is 15
$
Преобразованный для использования в Perl awk-сценарий, как правило, выполняет идентичную функцию, часто с большей скоростьюй, конечно, без каких-либо присущих awk ограничений на длину строки, количество параметров и т.д. Некоторые преобразованные Perl-программы могут выпол-няться медленнее; Perl-действие, зквивалентное данной awk-операции, не обязательно будет самым эффективным Perl-кодом, по сравнению с написанным вручную.
Вы, возможно, захотите оптимизировать Преобразованный Perl-код или добавить в Perl-версию программы новые функциональные возможности. Это сделать довольно просто, поскольку полученный Perl-код читается достаточно легко (учитывая, что перевод выполняется автоматически, следует отметить это как большое достижение).
В некоторых случаях перевод не выполняется механически. Например, сравнение "меньше чем" и для чисел, и для строк в awk выражается операцией <. В Perl для строк используется it, а для чисел — операция <. В большинстве случаев awk, как и утилита a2p, делает разумное предположение относительно числового или строкового характера двух сравниваемых значений. Однако вполне возможно, что о каких-нибудь двух значениях будет известно недостаточно много для того, чтобы определить, какое должно выполняться сравнение — числовое или строковое, поэтому a2p использует наиболее вероятную операцию и помечает возможно ошибочную строку знаками #?? (Perl-комментарием) и пояснением. После преобразования обязательно просмотрите результат на предмет наличия таких комментариев и проверьте сделанные предположения. Более подробно о работе утилиты a2p рассказывается на ее man-странице. Если этой утилиты в том каталоге, откуда вы вызываете Perl, нет, громко пожалуйтесь тому, кто инсталлировал вам Perl.
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|