Создание серверных приложений на языке PERL
1eeb656d

Метасимволы



Урок 9. Метасимволы

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

И так, что же такое метасимволы? Метасимвол - это особая последовательность символов, которая выполняет роль непечатаемого символа, либо какую-либо другую специфическую роль.
С некоторыми такими символами Вы уже знакомы, это "$", которым мы обозначаем скалярные переменные, и "@", которым обозначаем массив. Другие часто встречающиеся метасимволы приведены в таблице ниже.



\t символ табуляции
\n символ возврата каретки и перевода строки
\b backspace (забой)
\034 восьмеричный символ
\xla шестнадцатеричный символ
\l нижний регистр следующего символа
\u верхний регистр следующего символа

Это не полная таблица, за дополнительным материалом обращайтесь к справочным пособиям.
Давайте подробнее поговорим о метасимволе "\n". Это ни что иное как признак конца строки. К примеру, когда Вы набираете текст в текстовом редакторе и нажимаете "Enter" для перехода к новой строке, вы просто добавляете этот символ.

Помните, когда мы проходили двойные и одинарные кавычки я говорил Вам, что в двойных кавычках переменные интерполируются, а в одинарных - нет?! Так вот, это не совсем так. Интерполируются не переменные, а метасимволы. Теперь Вы должны это запомнить.

Давайте рассмотрим такую ситуацию, когда нам необходимо вывести на экран последовательность символов "\n", а не метасимвол. В таком случае выводимую строку можно заключить в одинарные кавычки и интерполяции не произойдет. А если ситуация не позволяет этого делать? Допустим, в этой же строке нам нужно вывести и значение некоторой переменной? Безусловно, мы можем заключить переменную в двойные кавычки, а последовательность "\n" в одинарные и выводить всё поотдельности. Но делать этого не следует, т.к. в Perl предусмотрен еще один метасимвол, говорящий интерпретатору, что следующий символ не подлежит интерполяции. Другими словами этот символ отменяет действие следующего за ним метасимвола. Таким метасимволом является "\" (обратный слеш). Обратите внимание на следующий пример:
print "...и он спросил: "А где ж твоя голова?"..."; - выполнение такой строки приведет к неминуемой ошибке. С точки зрения Perl, строка для вывода началась с открытия первой двойной кавычки и закончилась второй, а не последней. Для Perl кавычки в данном случае - флаги, он рассматривает их не как обычные символы, предназначенные для вывода, а как метасимволы. С помощью символа "\" можно снизить пристрастность Perl к наблюдению за кавычками. Посмотрите как легко можно превратить кавычки в обычные символы:
print "...и он спросил: \"А где ж твоя голова?\"...";. С точки зрения Perl, эта строка безупречна и не содержит ошибок.
Также обстоят дела и с последовательностью "\n". Достаточно поставить перед ней обратные слеш, и она будет восприниматься как группа обычных символов: "\\n".

Обратным слешом удобно пользоваться когда речь идет о выведении HTML кода с подстановкой переменных, к примеру тега <FONT>: print "<font size=\"$size\" color=\"black\" face=\"Times new roman\">"; . В зависимости от значения переменной $size выводимая строка может быть любой. К примеру, если её значение - 4, строка получится следующей:

<font size="4" color="black" face="Times new roman"&gt

Использование \n при выводе страниц

Вспомните урок 5, где мы изучали оператор повторения FOR. Запустите программу, отображающую таблицу Пифагора и посмотрите в браузере исходный текст HTML. Вы увидите, что весь HTML файл написан в одну строку. Согласитесь, что это очень неудобно с точки зрения анализа выводимых данных.
Давайте модернизируем программу таким образом, чтобы она выводила HTML текст в несколько строк. Для этого достаточно поместить метасимвол "\n" после перевода строки тегом <BR>:

#!/usr/bin/perl #programm 8 print "Content-Type: text/html\n\n"; print '<font face="courier new">'; for($i=1;$i<=9;$i++){ for($u=1;$u<=9;$u++){ if(($u*$i)/10 < 1){print"&nbsp;"} unless($u*$i==1){print $u*$i}else{print"&nbsp;"} print "&nbsp;"; } print"<br>\n"; } print '</font>';

Вот теперь полный порядок!

* * * *

Напишите программу, которая выводит несколько произвольных E-mail адресов по одному на каждой строке. Используйте тег <pre> и символ возврата каретки для форматирования.

Напишите программу, которая выводит строку, заданную в переменной. Первый символ строки должен быть в верхнем регистре.
Примечание: это будет работать только со строками, содержащими английские символы.



Содержание раздела