Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
perl.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
388.1 Кб
Скачать

Форматированный вывод данных функцией printf

Perl имеет функции printf и sprintf, которые очень похожи насоответствующие функции библиотеки времени выполнения языка С.Они имеют следующий формат:

$result = printf([FileHandle] Format, List);

$result = sprintf(Format, List);

По умолчанию функция printf посылает форматированный выходна стандартный выход STDIO, а функция sprintf возвращает форматированную строку. В обоих случаях формат строк почти аналогиченфункциям языка С, исключая только отсутствие поддержки функциямиязыка Perl спецификатора длины (*). Следующий фрагмент программыиллюстрирует использование функций printf и sprintf.

$precision = 2;

$pi = 3.1415;

printf("%.2f\n", $pi); # выведет 3.14

printf("%.${precision}f", $pi); # выведет 3.14

Вызов внешних программ из скрипта на языке perl

Будучи в известном смысле заменой скриптов shell, Perl обеспечивает поддержку системного взаимодействия, включая вызов внешних программ. В следующих разделах рассматривается несколько способов вызова внешних программ из скриптов Perl. Имейте, однако, ввиду, что позволяя скриптам выполнять системные команды, вы темсамым открываете бреши в системе безопасности вашего узла. Придерживайтесь общего правила не выполнять внешних команд из скрипта на языке Perl. Тем не менее, если вы вынуждены выполнять внешние команды из скрипта, то можете использовать для этих целейвстроенные функции system, exec или fork.

Регулярные выражения

На протяжении этой главы вы познакомились с примерами функций для обработки строк. Многие из них основаны на концепции регулярных выражений. Как вы видите из следующих разделов, скриптыязыка Perl широко используют регулярные выражения для обработкитекста. Если регулярные выражения внове для вас, то не беспокойтесь. Спустя короткое время после того, как вы познакомитесь снесколькими разделами этой главы, регулярные выражения станут длявас просты и понятны.

Обзор регулярных выражений

Регулярные выражения являются причудливым термином, возникшим в компьютерной науке и служащим для обозначения образца, состоящего из символов. Скрипты на языке Perl используют символьныеобразцы просто для того, чтобы провести анализ входных данных,расщепляя их на части. Часто скрипт может проанализировать входные данные, основываясь на пробелах, запятых, символах табуляциии других разделителях. Но когда входные данные имеют произвольный формат то лучше всего с такой задачей справляются регулярные выражения.

Синтаксис регулярных выражений

Для сокращения размеров регулярных выражений, Perl использует специальные символы. Таблица 12.6 содержит список некоторых из символов, используемых скриптами языка Perl в регулярных выражениях.

Табл. 12.6. Символы, используемые в регумрных выражениях

Символ

Описание

.

Соответствует любому символу (за исключением символа новой строки)

(..)

Группирует последовательность элементов

+

Удовлетворяет предыдущему образцу один или большее количество раз

?

Удовлетворяет образцу нуль или один раз

*

Соответствует образцу один или нуль раз

[...]

Соответствует символу из заданного множества

[^...]

Соответствует символу из множества, полученного отрицанием

(...|...|...)

Соответствует одной из альтернатив

^

Соответствует началу строки

$

Соответствует образцу в конце строки

{n,m}

Соответствует образцу от n до m раз

{n}

Соответствует образцу точно n раз

{n,}

Соответствует образцу минимум n раз

\n\t etc.

Соответствует знаку новой линии, символу табуляции и т. д.

\b

Соответствует на границе слова

\B

Соответствует внутри границ слова

\d

Соответствует цифре

\D

Соответствует не цифре

\s

Соответствует пробелу

\S

Соответствует не пробелу

\w

Соответствует букве или цифре

\W

Соответствует символу, не являющемуся ни буквой, ни цифрой

Perl помещает регулярные выражения (образцы, шаблоны) в слэши, т. е. в наклонные черточки, например, в виде /pattern/. Следующий фрагмент программы иллюстрирует регулярные выражения языка Perl:

# the following regular expressions are true if:

/ig/ # string contains 'ig'

/(b|d|f)ig/ # string contains 'big', 'dig' or 'fig'

/[0-9]+/ # string contains a number

/[A-Za-z][A-Za-a0-9_]*/ # string contains an identifier

Если эти выражения кажутся вам бессмысленными, не беспокойтесь. В этой главе мы собираемся рассмотреть несколько регулярных выражений. Сейчас просто запомните, что Perl помещает регулярные выражения между двумя наклонными чертами-слэшами, как показано выше.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]